{"version":3,"file":"main.1c79cceda82e690e.js","mappings":"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AAgB,0CC3F7B,IAAYxoB,8BAAU,KACpByrB,UACAzrB,YACAA,sBACAA,aAJoB,+BCAtB,IAAY0rB,8BAAgB,KAC1BA,uCACAA,gDACAA,iCACAA,2CACAA,qCACAA,qCACAA,qCACAA,+BACAA,+BACAA,+BACAA,kDACAA,kCACAA,sDACAA,sDACAA,sDACAA,gEACAA,gEACAA,gEACAA,gDACAA,gDACAA,gDACAA,4CACAA,0BACAA,oBACAA,8BACAA,oBACAA,4BACAA,sBACAA,wCACAA,8BACAA,wBACAA,wBACAA,sCACAA,4CACAA,8CACAA,0DACAA,sDACAA,oDACAA,wDACAA,4DACAA,0DACAA,sCACAA,oCACAA,8BACAA,4BACAA,0CACAA,wCACAA,gCACAA,8BACAA,oCACAA,kCACAA,kDACAA,gDACAA,oCACAA,4BACAA,wCACAA,8BACAA,kCACAA,gDACAA,oCACAA,4BACAA,wCACAA,8BACAA,kCACAA,gDACAA,kCACAA,kCACAA,kDACAA,8CACAA,0DACAA,sDACAA,oDACAA,wDACAA,4DACAA,0DACAA,kDACAA,8CACAA,0DACAA,sDACAA,oDACAA,wDACAA,4DACAA,0DACAA,8CACAA,8CACAA,8BACAA,8BACAA,8BACAA,8CACAA,oEACAA,0CACAA,gEACAA,2CACAA,iEACAA,gCACAA,gCACAA,gCACAA,sCACAA,sCACAA,uCACAA,mCACAA,mCACAA,mCACAA,kCACAA,wCACAA,mCA1G0B,wGCKrB,MAAMC,EAA4B,kBAM5BC,KAAqCC,KAChD,CACEC,SAAU,MAEZH,GAGWI,EAA4D,IACvEF,KAA2CF,IAGhCphB,KAAUyhB,MACrBJ,KACAI,MAAGC,IAAoB,CAACvf,EAAOC,SAAiBD,KAAUC,KAAU,yIC8F/D,MAAMuf,EAAuB,iBAE9BC,EAAmC,CACvCC,UACAA,UACAA,UACAA,UACAA,WAiEWR,KAAgCS,KAC3C,CACE/B,uBAAwB,KACxBgC,+BAA+B,EAC/BjC,uBAAwB,KACxBkC,+BAA+B,EAC/BC,eAAgB,GAChBC,mBAAoB,KACpBC,kBAAmB,KACnBC,cAAe,KACflC,kBAA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CAPA,CAAYA,MAAsB,KASlC,SAAYC,GACVA,cACAA,gBACAA,sBACAA,kBACAA,uCACF,CANA,CAAYA,MAAuB,KAQnC,SAAYC,GACVA,mBACAA,6CACAA,oBACF,CAJA,CAAYA,MAAiB,KAM7B,SAAY77C,GACVA,mBACAA,8BACF,CAHA,CAAYA,MAAoB,mCClDhC,IAAY9nB,8BAAmB,KAC7BA,iBACAA,iCACAA,yBACAA,mCACAA,kCAL6B,+BCA/B,IAAYb,8BAAe,KACzBykE,wBACAzkE,cACAA,gBACAA,8BACAA,8BACAA,8BACAA,8BACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,mCAjByB,+BCA3B,IAAYiC,8BAAU,KACpByiE,kBACAziE,oBACAA,iBAHoB,+BCAtB,IAAY7C,8BAAa,KACvBulE,gBACAvlE,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,gBACAA,iBACAA,kBACAA,mBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,qBACAA,oBACAA,qBACAA,qBACAA,kBACAA,mBACAA,oBACAA,oBACAA,oBACAA,kBACAA,mBACAA,kBAhCuB,+BCAzB,IAAYoB,8BAAe,KACzBA,mBACAA,mBACAA,mBACAA,+BACAA,8BALyB,+BCA3B,IAAYioB,8BAAa,KACvBm8C,wBACAn8C,sCACAA,gCACAA,8CACAA,oDACAA,mDANuB,+BCAzB,IAAYF,8BAAiB,KAC3BA,iBACAA,qCACAA,iDACAA,gEAJ2B,+BCA7B,IAAYlnB,8BAAqB,KAC/BA,iBACAA,uCACAA,2BACAA,iCACAA,+BACAA,+BACAA,2BACAA,mCACAA,qCACAA,gBAV+B,+BCAjC,IAAY1C,8BAAY,KACtBA,6BACAA,gBAFsB,+BCAxB,IAAYkmE,8BAAqB,KAC/BxwC,oCACAwwC,sCACAA,0BACAA,4BACAA,oCACAA,uCAN+B,+BCAjC,IAAY9jE,8BAAS,KACnBA,qBACAA,mBACAA,2BACAA,yBACAA,uBACAA,yCACAA,yDACAA,iDACAA,qCACAA,iDACAA,wBACAA,uDAZmB,+BCArB,IAAY7B,8BAAK,KACf4lE,uBACA5lE,qBACAA,yBACAA,2BACAA,oBACAA,sBACAA,yBACAA,yBACAA,qBACAA,yBACAA,oBACAA,uBACAA,cACAA,YACAA,4BACAA,qBACAA,oBACAA,yBACAA,qBACAA,2BACAA,kBACAA,kBACAA,cACAA,mBACAA,gBACAA,sBACAA,kBACAA,+BACAA,iCACAA,2BACAA,cACAA,cACAA,gBACAA,wBACAA,0BACAA,0BACAA,0BACAA,yBACAA,gBACAA,oBACAA,oBACAA,uBACAA,gBACAA,gBACAA,kCACAA,oBACAA,wBACAA,kCACAA,oCACAA,cACAA,gBACAA,iCACAA,+BACAA,sBACAA,kBACAA,cACAA,gBACAA,kBACAA,kBACAA,8BACAA,gBACAA,wBACAA,kCACAA,oBACAA,sBACAA,uCACAA,qCACAA,gBACAA,cACAA,cACAA,kBACAA,oBACAA,qBACAA,kBACAA,+BACAA,yBACAA,gCACAA,kBACAA,sBACAA,wBACAA,gBACAA,kBACAA,sBACAA,kBACAA,cACAA,cACAA,oBACAA,YACAA,gCACAA,cACAA,sBACAA,oBACAA,gBACAA,cACAA,kBACAA,sBACAA,wBACAA,2BACAA,wCACAA,0BACAA,uBACAA,sBACAA,gBACAA,oCACAA,6BACAA,+BACAA,+CACAA,8BACAA,uBACAA,6BACAA,gBACAA,6BACAA,kBACAA,yBACAA,uBACAA,wBACAA,kBACAA,0BACAA,yBACAA,6BACAA,cACAA,sBACAA,aACAA,2BACAA,6BACAA,6BACAA,2BACAA,gCACAA,kCACAA,cACAA,cACAA,oBACAA,sBACAA,wBACAA,gBACAA,sBACAA,+BACAA,uBACAA,2BACAA,uBACAA,yBACAA,2BACAA,sBACAA,uBACAA,2BACAA,gCACAA,8BACAA,yBACAA,iCACAA,8BACAA,gCACAA,gBACAA,6BACAA,2BACAA,0CACAA,uCA5Je,+BCAjB,IAAY6lE,8BAAO,KACjBA,2BACAA,mBACAA,gBAHiB,+BCAnB,IAAYC,8BAAa,KACvBA,2BACAA,wBACAA,wBACAA,wBACAA,yBACAA,2BANuB,+BCAzB,IAAYrjE,8BAAU,KACpBsjE,YACAtjE,gBACAA,sBACAA,kBACAA,8BACAA,kCACAA,0CACAA,+BARoB,+BCAtB,IAAYQ,8BAAoB,KAC9B+iE,kDACA/iE,8CACAA,kDACAA,gFACAA,oFACAA,gEACAA,8BAEAA,4DACAA,kEACAA,8CACAA,kDAEAA,oDACAA,8DACAA,mEAhB8B,+BCAhC,IAAYrC,8BAAe,KACzBqlE,kBACArlE,sBACAA,gCACAA,kBACAA,gBACAA,wBACAA,6BAPyB,+BCA3B,IAAYuC,8BAAe,KACzBk8D,oBACAl8D,oBACAA,gBACAA,2BACAA,YACAA,cACAA,4BACAA,wCACAA,sCACAA,0BACAA,YACAA,wBACAA,kBACAA,kBACAA,kDACAA,sBACAA,iCAjByB,+BCA3B,IAAYlB,8BAAoB,KAC9BA,yBACAA,yCACAA,iBACAA,iCACAA,iCACAA,+BACAA,uBACAA,iCACAA,0CAT8B,+BCAhC,IAAYjB,8BAAmB,KAC7BksD,YACAlsD,kCACAA,kEACAA,kEACAA,sCACAA,sDACAA,sDACAA,kEACAA,wEACAA,gEACAA,8DACAA,8EACAA,0EACAA,gEACAA,4EACAA,0EACAA,8DACAA,gDACAA,oDACAA,0CACAA,gCACAA,sCACAA,sCACAA,4DACAA,sEACAA,0EACAA,oEACAA,4DACAA,4CACAA,wDACAA,gEACAA,8DACAA,8EACAA,0EACAA,gEACAA,4EACAA,0EACAA,8DACAA,gDACAA,oDACAA,0CACAA,gCACAA,4DACAA,sEACAA,0EACAA,oEACAA,4DACAA,4CACAA,wDACAA,kCACAA,kCACAA,8BACAA,8BACAA,gDACAA,sCACAA,oCACAA,gFACAA,gFACAA,yBACAA,wBACAA,0BACAA,0BACAA,0BACAA,wBACAA,sBACAA,+BAlE6B,8BCA/B,IAAYklE,8BAAY,KACtBA,iBACAA,iBACAA,uBACAA,kBAJsB,+BCAxB,IAAYC,8BAAS,KACnBC,wBACAD,mCACAA,6CACAA,0CACAA,2BACAA,6BACAA,qCACAA,2BACAA,6BACAA,kCACAA,uBACAA,yBACAA,kCACAA,oDACAA,+BAfmB,+BCArB,IAAY3lE,8BAAS,KACnB48D,0CACA58D,gCACAA,sCACAA,qCACAA,qCACAA,uCACAA,iCACAA,uCACAA,gBACAA,4CACAA,gDACAA,iDACAA,wDACAA,0CACAA,sBACAA,kCACAA,oCACAA,cACAA,gBACAA,gBACAA,sCACAA,8BACAA,sBACAA,gCACAA,sBACAA,0CACAA,wCAEAA,gCACAA,sCAEAA,wBACAA,gCAEAA,kBAEAA,wBACAA,kBACAA,sCACAA,sBACAA,kBACAA,mCACAA,YACAA,0BACAA,cACAA,gBACAA,sBACAA,wBACAA,sBACAA,oBACAA,oBACAA,wBAEAA,oBACAA,wBACAA,YACAA,oBACAA,sBACAA,4BACAA,sBAEAA,0BACAA,sCACAA,8DACAA,kCACAA,cACAA,6BACAA,oBACAA,uCACAA,oBACAA,oBACAA,4BACAA,2BAzEmB,+BCArB,IAAYJ,8BAAkB,KAC5BT,UACAS,gBACAA,cACAA,gBACAA,YACAA,iBAN4B,+BCA9B,IAAYE,8BAAmB,KAC7BX,UACAW,yBAF6B,+BCA/B,IAAYiC,8BAAgB,KAC1BA,iBACAA,yBACAA,kBAH0B,+BCA5B,IAAY8jE,8BAAU,KACpBA,qBACAA,oBAFoB,+BCAtB,IAAYxjE,8BAAiB,KAC3ByjE,4BACAzjE,6BAF2B,+BCA7B,IAAYd,8BAAY,KACtBwkE,0BACAxkE,kBACAA,oBACAA,UACAA,gBACAA,mBANsB,+BCAxB,IAAYL,8BAAQ,KAClBA,iBACAA,2BACAA,8BAHkB,+BCApB,IAAYhB,8BAAiB,KAC3BA,iBACAA,2BACAA,oBAH2B,+BCA7B,IAAY2C,8BAAoB,KAC9BA,iBACAA,wBACAA,2BACAA,mBACAA,+BACAA,qBACAA,uBACAA,6BACAA,+BACAA,2BACAA,yBACAA,0BAZ8B,+DCEzB,SAASmjE,EACdC,EACAn1D,EACAo1D,EAAuB,OAEvB,QAAKD,GAAgBl1D,WAIhBD,IAIA6D,MAAMC,QAAQ9D,KACjBA,EAAkB,CAACA,KA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mBACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,YACA,eACA,mBACA,sBACA,kBACA,qBACA,aACA,gBACA,aACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,iBACA,oBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,cACA,iBACA,aACA,gBACA,cACA,iBACA,cACA,kBACA,qBACA,iBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,mBACA,sBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,oBAIA,cACA,WACA,WACA,CACA,cACA,cACA,8CACA,gCACAhX,CACA,CACA,WACA,CACAwzG,kBACA,qBACA,EACAA,YACAC,YACAD","names":["UserTypeListConst","value","user_type","label","PillOptions","Below30Days","ComponentAbstract","constructor","cdr","this","index","EDropdownTab","PREDEFINED","OWN","workflow_step_list_const","priority_type_list_const","none_radio_option_const","dropdown_tab_enum","EIcon","icon_enum","EColorPalette","color_palette_enum","ESelectionDateMode","selection_date_mode_enum","ESelectionRangeMode","selection_range_mode_enum","RoutePath","route_path_enum","WorkflowPhaseType","workflow_phase_type","MainPageActions","main_page_actions","BreadcrumbTheme","breadcrumb_theme_enum","PermissionLevelType","permission_level_enum","WorkflowStep","workflow_step_enum","AttachmentType","attachment_component_type_enum","CompareOperator","compare_operator_enum","ChartTypes","chart_types_enum","UserType","AuditableEntityType","auditable_entity_type","FieldType","field_type","UpdateStatus","update_status","NotificationCategory","notification_category","DelinquencyResultType","delinquency_result_type","TurnoverForm","turnover_form","TicketStatusType","ticket_status_type","LoaderType","loader_type","Animation","animation","TurnoverAuditMode","turnover_audit_mode","ButtonType","button_type","LocalStorageDataEnum","local_storage_data_enum","ManagementRoute","management_route_enum","WorkflowStepEnumType","toggleMenu","menuExpanded","isExpanded","detectChanges","trackByFn","item","id","core","inputs","CustomControlAbstract","_component_abstract__WEBPACK_IMPORTED_MODULE_0__","ngControl","formDirective","super","_angular_forms__WEBPACK_IMPORTED_MODULE_1__","valueAccessor","showValidationErrorOrSubmitted","submitted","showValidationError","registerOnChange","fn","onChanged","registerOnTouched","onTouched","checkStatus","control","invalid","touched","markAsTouched","markAsUntouched","pristine","markAsPristine","markAsDirty","listenControlTouched","rxjs__WEBPACK_IMPORTED_MODULE_2__","observer","originalMarkAsTouched","originalReset","reset","args","next","call","checkControlStatus","status","errors","markForCheck","_angular_core__WEBPACK_IMPORTED_MODULE_3__","features","AdministrationAbstract","component_abstract","store","selectAllGeneralRoles","select","administration_selectors","pipe","ngneat_until_destroy","filter","generalRoles","tap","dispatch","administration_actions","generalRoleRadioList","map","roleName","selectGeneralRoleRadioList","userRoles","loadAllUsers","_ngrx_store__WEBPACK_IMPORTED_MODULE_0__","loadAllUsersSucceeded","loadAllUsersFailed","loadPropertyUsers","loadPropertyUsersSucceeded","loadPropertyUsersFailed","clearAllUsers","loadAllPropertyRoles","clearAllPropertiesRoles","loadAllPropertiesRolesSucceeded","loadAllUserToPropertyMappings","clearAllUserToPropertyMappings","loadAllUserToProperyMappingsSucceeded","loadAllPermissionLevels","loadAllPermissionLevelsSucceeded","loadAllGeneralRolesToPermissionMapping","loadAllGeneralRolesToPermissionMappingSucceeded","loadUserToRoleMapping","loadUserToRoleMappingSucceeded","clearUserToRoleMapping","setSelectedUsers","loadAllGeneralRoles","loadAllGeneralRolesSucceeded","clearAllGeneralRoles","setAllUsersCombinedWithGeneralRoles","loadPropertiesStructure","clearPropertiesStructure","loadPropertiesStructureSucceeded","startAddNewUser","addingNewUserSucceeded","addingNewUserFailed","clearAddedUser","assignUserToProperty","assignUserToPropertySuccess","assignUserToPropertyError","removingPropertyAssignedUser","removingPropertyAssignedUserSuccess","removingPropertyAssignedUserError","requestFailure","saveUsersRolesAndUnits","selectGeneralRoleToEdit","saveUsersRolesAndUnitsSucceeded","startDeleteGeneralRole","deleteGeneralRoleSucceeded","deleteGeneralRoleFailed","clearSelectedGeneralRole","startSavingGeneralRole","savingGeneralRoleSucceeded","savingGeneralRoleFailed","startUpdatingGeneralRole","updatingGeneralRoleSucceeded","updatingGeneralRoleFailed","setGeneralRoleRadioList","inviteNewUser","inviteNewUserSuccess","inviteNewUserError","updateUserData","updateUserDataSuccess","updateUserDataError","saveUserToGeneralRole","saveUserToGeneralRoleSuccess","saveUserToGeneralRoleError","clearUserPreviewData","removeUser","reactivateUser","removeUserSucceeded","reactivateUserSucceeded","removeUserFailed","VENDOR_ROLE_NAME","administrationFeatureKey","reducer","_ngrx_store__WEBPACK_IMPORTED_MODULE_3__","addNewUserInProgress","addedUser","deleteGeneralRoleInProgress","generalRolesToPermissionMapping","permissionLevels","propertiesRoles","propertiesStructure","activePropertyUsers","propertyUsersLoading","saveGeneralRoleInProgress","selectedGeneralRole","selectedUsers","userToGeneralRole","userToPropertyMapping","activeUsers","activeUserOrVendorOptionsList","inactiveUsers","usersLoading","usersWithGeneralRoles","usersWithGeneralRolesLoading","userUpdateInProgress","userUpdateStatus","userInviteInProgress","userInviteStatus","userInvited","saveUserToGeneralRoleInProgress","saveUserToGeneralRoleStatus","assignUserIntoPropertyInProgress","assignUserIntoPropertyStatus","removingPropertyAssignedUserInProgress","removingPropertyAssignedUserStatus","removeUserInProgress","_actions_administration_actions__WEBPACK_IMPORTED_MODULE_2__","state","action","_shared_functions_get_user_list_function__WEBPACK_IMPORTED_MODULE_1__","users","result","saveUserToPropertyInProgress","_shared_enums_update_status__WEBPACK_IMPORTED_MODULE_0__","user","generalRole","selectAdministrationState","_ngrx_store__WEBPACK_IMPORTED_MODULE_1__","_reducers_administration_reducer__WEBPACK_IMPORTED_MODULE_0__","selectActiveUsers","administrationState","selectInactiveUsers","selectAllUsers","concat","selectAllUsersLoading","selectAllPermissionLevels","selectAllUserToGeneralRoleMapping","selectAllGeneralRolesToPermissionMapping","selectAllPropertyRoles","selectAllSelectedUsers","selectAllUsersWithGeneralRoles","selectAllUsersWithGeneralRolesLoading","selectAllPropertiesStructure","selectSaveUserToGeneralRoleInProgress","selectSaveUserToGeneralRoleStatus","selectAssignUserIntoPropertyInProgress","selectAssignUserIntoPropertyStatus","selectRemovingPropertyAssignedUserInProgress","selectRemovingPropertyAssignedUserStatus","selectIsDeleteGeneralRoleInProgress","selectAddNewUserInProgress","selectAddedUser","selectAllUserToPropertyMappings","selectSelectedGeneralRole","selectSavingGeneralRoleInProgress","selectPropertyUsers","selectPropertyUsersLoading","selectUserInviteInProgress","selectUserInviteStatus","selectUserInvited","selectUserUpdateInProgress","selectUserUpdateStatus","selectUserRemoveInProgress","BoardsAbstract","snackbarService","hasEditRight$","_shared_selectors_user_selectors__WEBPACK_IMPORTED_MODULE_2__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_5__","rxjs_operators__WEBPACK_IMPORTED_MODULE_6__","permissionLevel","length","rxjs_operators__WEBPACK_IMPORTED_MODULE_7__","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_1__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_0__","rxjs_operators__WEBPACK_IMPORTED_MODULE_8__","hasRight","hasEditRight","subscribe","checkEditRight","notify","warning","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_3__","_angular_core__WEBPACK_IMPORTED_MODULE_9__","DragCursorDirective","document","cdkDrag","ngOnInit","started","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_0__","body","style","cursor","ended","_angular_core__WEBPACK_IMPORTED_MODULE_1__","_angular_common__WEBPACK_IMPORTED_MODULE_2__","selectors","__decorate","BoardColumnType","BoardType","BoardOutputType","BoardOutputBehaviour","BoardProgressType","BoardSourceType","BoardMakeReadySteps","ScheduleCellStatus","BoardView","RestBoardModel","board","name","progressType","datasource","boardType","outputAction","outputBehaviour","boardCellColor","allPortfolios","selectedPortfolioIds","join","boardColumnsConfig","JSON","stringify","columns","e","type","_board_enums__WEBPACK_IMPORTED_MODULE_2__","Board","config","isBoardResponse","entity","parse","Array","isArray","isBoardColumn","forEach","c","uuid__WEBPACK_IMPORTED_MODULE_3__","propertyColumnIndex","findIndex","unitColumnIndex","splice","editable","visible","frozen","initDefaultColumns","split","Number","addColumn","workflowStep","poisition","column","push","ColumnSorting","sorting","primaryValue","cellValueHelper","columnId","fieldFunction","getComparedValueFunction","sortFunction","e1","e2","value1","value2","getComparableValue","phasePriority","isColumnSummable","includes","isCostColumn","ProgressTypeList","BoardSourceTypeList","BoardTypeList","BoardOutputBehaviourList","BoardOutputTypeList","disallowSourceTypeOutputTypeMap","getNextStepType","turnover","turnoverData","dateMoveIn","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_1__","getCurrentStep","sourceType","CustomInspectionContent","items","rxjs__WEBPACK_IMPORTED_MODULE_0__","_itemsChanged","asObservable","_templateChanges","init","sort","a","b","position","addItem","inspectionItemName","inspectionItemId","uuid__WEBPACK_IMPORTED_MODULE_1__","inspectionItemChecked","onItemChanged","removeItem","updateItemName","innerItem","updateItemChecked","emitChangeTemplate","templateItems","options","emitChange","i","totalItemsCount","checkedItemsCount","progressBar","CustomInspectionService","service","modalsService","_templatesLoading","getInspectionTemplates","preserveInspectionId","getData","route","rxjs_operators__WEBPACK_IMPORTED_MODULE_3__","templates","template","isAvailable","rxjs__WEBPACK_IMPORTED_MODULE_4__","getCustomInspectionContent","inspectionId","updateCustomInspectionContent","data","post","addCustomInspectionTemplateWithPredefinedItems","rxjs__WEBPACK_IMPORTED_MODULE_5__","inspection","_main_application_boards_interfaces_custom_inspection__WEBPACK_IMPORTED_MODULE_6__","updateCustomInspectionTemplateContent","addCustomInspectionTemplateWithItems","addCustomInspectionTemplate","editCustomInspectionTemplate","getInspectionTemplate","getCustomInspectionTemplateContent","templateId","hideInspectionTemplate","removableTemplate","openRemovalTemplateModal","inspectionTemplate","openConfirmationModal","title","titleCss","content","cancelLabel","confirmLabel","confirmColor","_angular_core__WEBPACK_IMPORTED_MODULE_7__","factory","closeMenus","loadBoardList","loadBoardListSuccess","loadBoardListFailed","CompanyForm","ID","CompaniesAbstract","dashboards_abstract","getCompaniesList","getCompaniesListSuccess","getCompaniesListFailed","addCompany","addCompanySuccess","addCompanyFailed","addCompanyWithOwner","addCompanyWithOwnerSuccess","addCompanyWithOwnerFailure","getCompany","getCompanySuccess","getCompanyFailed","clearCompany","updateCompany","updateCompanySuccess","updateCompanyFailed","deleteCompany","deleteCompanySuccess","deleteCompanyFailed","addEmployeeToCompany","addEmployeeToCompanySuccess","addEmployeeToCompanyFailed","deleteEmployeeFromCompany","deleteEmployeeFromCompanySuccess","deleteEmployeeFromCompanyFailed","getContractorList","getContractorListSuccess","getContractorListFailed","addAddressToCompany","addAddressToCompanySuccess","addAddressToCompanyFailed","updateAddressInCompany","updateAddressInCompanySuccess","updateAddressInCompanyFailed","AddNewCompanyModalComponent","_companies_abstract_companies_abstract__WEBPACK_IMPORTED_MODULE_0__","dialogRef","formBuilder","displayName","form","get","DISPLAY_NAME","legalName","LEGAL_NAME","initForm","cancel","close","save","markAllAsTouched","companyModel","contactPersonId","employees","addresses","_companies_actions_companies_actions__WEBPACK_IMPORTED_MODULE_1__","group","_angular_forms__WEBPACK_IMPORTED_MODULE_3__","_angular_core__WEBPACK_IMPORTED_MODULE_4__","ctx","companiesFeatureKey","companyList","companyListLoading","companyAddLoading","companyModelLoading","addEmployeeToCompanyLoading","deleteEmployeeFromCompanyLoading","contractors","contractorsLoading","companyUpdateLoading","companyDeleteLoading","updateAddressInProgress","addCompanyWithOwnerInProgress","_companies_actions_companies_actions__WEBPACK_IMPORTED_MODULE_0__","selectCompaniesState","_reducers_companies_reducer__WEBPACK_IMPORTED_MODULE_0__","selectCompanyList","companiesState","selectCompanyListLoading","selectCompany","selectCompanyLoading","selectUpdateAddressInProgress","selectCompanyUpdateLoading","selectAddEmployeeToCompanyLoading","selectContractors","selectDeleteEmployeeFromCompanyLoading","selectContractorsLoading","selectAddCompanyWithOwnerLoading","setDashboardFilter","loadTurnoverKanbanProperty","loadTurnoverKanbanPropertySuccess","loadTurnoverKanbanPropertyError","resetTurnoverKanbanProperty","clearTurnoverKanbanPortfolio","loadTurnoverKanbanPortfolio","loadTurnoverKanbanPortfolioSuccess","loadTurnoverKanbanPortfolioError","resetTurnoverKanbanPortfolio","kanbanListGenerateSuccess","loadUserTurnovers","loadUserTurnoversSuccess","loadUserTurnoversError","resetUserTurnoversError","loadMyTasks","loadMyTasksSuccess","loadMyTasksError","myTasksHeaderData","clearMyTasks","loadPropertyKpi","loadPropertyKpiSucceded","loadPropertyKpiFailed","loadUnitSummaryByProperty","loadUnitSummaryByPropertySucceded","loadUnitSummaryByPropertyFailed","clearUnitSummaryByProperty","loadActiveTurnoversSummary","loadActiveTurnoversSummarySucceded","loadActiveTurnoversSummaryFailed","clearActiveTurnoversSummary","loadActiveTurnoversDetails","loadActiveTurnoversDetailsSucceded","loadActiveTurnoversDetailsFailed","loadDelinquencyByUnit","loadDelinquencyByUnitSucceded","loadDelinquencyByUnitFailed","loadDelinquencySummary","loadDelinquencySummarySucceded","loadDelinquencySummaryFailed","clearDelinquencySummary","loadRenewalsSummary","loadRenewalsSummarySucceded","loadRenewalsSummaryFailed","clearRenewalsSummary","selectedPropertyId","loadUnitDetails","loadUnitDetailsSuccess","loadUnitDetailsFailed","loadUnitDetailsByType","loadUnitDetailsByTypeSuccess","loadUnitDetailsByTypeFailed","loadRenewalsDetails","loadRenewalsDetailsSuccess","loadRenewalsDetailsFailed","selectedDashboardViewType","selectedPortfolioId","loadMyProperties","loadMyPropertiesSuccess","loadMyPropertiesFailed","selectedDashboardMode","setCustomBreadcrumbs","loadUnitsWithActiveTurnovers","loadUnitsWithActiveTurnoversSuccess","loadUnitsWithActiveTurnoversFailed","resetUnitsWithActiveTurnoversList","loadUnitList","loadUnitListSuccess","loadUnitListFailed","resetUnitList","loadUnit","loadUnitSuccess","loadUnitFailed","clearUnit","updateUnit","updateUnitSuccess","updateUnitFailed","updateUnitDoNotAutoCreateTurns","updateUnitDoNotAutoCreateTurnsSuccess","updateUnitDoNotAutoCreateTurnsFailed","getRenewalStrategyForUnit","getRenewalStrategyForUnitSuccess","getRenewalStrategyForUnitFailed","setCurrentPortfolio","resetCurrentPortfolio","setCurrentProperty","resetCurrentProperty","joinProperties","setVacancyLossAttrType","setVacancyLossThreshold","loadPortfolioKpisTrend","loadPortfolioKpis","setPortfolioKpis","setPortfolioKpisTrend","loadPortfolioKpisFailed","loadPortfolioKpisTrendFailed","setPortfolioKpisFilter","clearPortfolioKpis","loadPortfolioKpiTrendLines","setPortfolioKpiTrendLines","clearPortfolioKpiTrendLines","setChartSelectorValue","setChartSettingsValue","DashboardsAbstract","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_0__","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_4__","DashboardViewType","_shared_enums_dashboard_view_type__WEBPACK_IMPORTED_MODULE_3__","DashboardMode","_shared_enums_dashboard_mode__WEBPACK_IMPORTED_MODULE_2__","TicketAttachmentType","_shared_enums_attachment_type__WEBPACK_IMPORTED_MODULE_1__","_angular_core__WEBPACK_IMPORTED_MODULE_5__","TimerService","restApiService","reloadTimer","associate","DashboardEffects","actions$","turnoversService","renewalsService","timerService","kpiService","ngrx_effects","dashboard_actions","switchMap","getPropertyTurnovers","propertyId","taskList","tasks","catchError","error","snackbar_message_enum","of","getPortfolioTurnovers","portfolioId","combineLatest","getAllTasks","myTasks","withLatestFrom","dashboards_selectors","dashboardEnumValue","routePath","kpi","err","unitSummary","activeTurnoversSummary","activeTurnoversDetails","delinquencyFilterType","delinquencySummary","delinquencyByUnit","renewalsSummary","dashboardViewType","unitDetails","unitDetailsByType","renewalDetailsCombined","myProperties","unitList","unitId","unit","mergeMap","update","updatedUnit","doNotAutoCreateTurns","renewalTargetForUnitId","unitTypeRentTarget","PIE","PortfolioKpiType","dashboardFilterFeatureKey","initialState","_shared_reducers_hydration_meta_reducer__WEBPACK_IMPORTED_MODULE_1__","assignee","metaDashboardFilterReducers","_ngrx_store__WEBPACK_IMPORTED_MODULE_2__","_dashboards_actions_dashboard_filter_actions__WEBPACK_IMPORTED_MODULE_0__","dashboardsFeatureKey","UPDATE_STORAGE_ACTIONS","_actions_dashboard_actions__WEBPACK_IMPORTED_MODULE_3__","_shared_reducers_hydration_meta_reducer__WEBPACK_IMPORTED_MODULE_4__","activeTurnoversDetailsLoading","activeTurnoversSummaryLoading","breadcrumbList","currentPortfolioId","currentPropertyId","dashboardMode","delinquencyByUnitLoading","delinquencySummaryLoading","myPropertiesLoading","portfolioItems","portfolioItemsLoading","portfolioUserTaskList","portfolioUserTaskListLoading","kanbanListLoading","kanbanListCount","propertyKpi","propertyKpiLoading","propertyUserTaskList","propertyUserTaskListLoading","userTaskList","userTaskListLoading","myTasksLoading","myTasksTicketsCount","myTasksTurnoversCount","staleTurnoversCount","lateTurnoversCount","renewalDetailsCombinedLoading","renewalStrategyForUnit","renewalStrategyForUnitLoading","renewalsSummaryLoading","unitDetailsByTypeLoading","unitDetailsLoading","unitListLoading","unitListWithActiveTurnover","unitListWithActiveTurnoverLoading","unitLoading","unitDoNotAutoCreateTurnsLoading","unitsSummaryByProperty","unitsSummaryByPropertyLoading","selectedVacancyLossAttr","_main_application_turnovers_interfaces_vacancy_loss_attr__WEBPACK_IMPORTED_MODULE_1__","selectedVacancyLossThreshold","_main_application_turnovers_interfaces_vacancy_loss_threshold__WEBPACK_IMPORTED_MODULE_2__","selectedVacancyLossThresholdKpiType","_dashboards_models_portfolio_kpi__WEBPACK_IMPORTED_MODULE_0__","selectedVacancyLossThresholdKpiTypePerTurn","metaDashboardReducers","nextState","localStorage","setItem","_ngrx_store__WEBPACK_IMPORTED_MODULE_5__","renewalsDetails","renewalKPI","attrType","thresholdType","kpiFeatureKey","_shared_reducers_hydration_meta_reducer__WEBPACK_IMPORTED_MODULE_3__","portfolioKpis","portfolioKpisTrendLoading","portfolioKpisFilter","windowType","_shared_enums_kpi_window_type__WEBPACK_IMPORTED_MODULE_2__","_shared_enums_kpi_type__WEBPACK_IMPORTED_MODULE_1__","portfolioKpisLoading","portfolioKpisTrend","portfolioKpiTrendLines","portfolioKpiTrendLinesLoading","chartSelectors","chartSettings","metaDashboardKpiReducers","_ngrx_store__WEBPACK_IMPORTED_MODULE_4__","_dashboards_actions_kpi_actions__WEBPACK_IMPORTED_MODULE_0__","kpis","selectorId","chartId","selectDashboardsState","_reducers_dashboards_reducer__WEBPACK_IMPORTED_MODULE_0__","selectMyTasks","selectPropertyUserTaskList","dashboardsState","selectPropertyUserTaskListLoading","selectMyTasksLoading","selectMyTasksTurnoversCount","selectStaleTurnoversCount","selectLateTurnoversCount","selectMyTasksTicketsCount","selectUserTaskListLoading","selectUserTaskList","selectKanbanListCount","selectPortfolioUserTaskList","selectPortfolioUserTaskListLoading","selectKanbanListLoading","selectSelectedPropertyId","selectPropertyKpiLoading","selectPropertyKpi","selectActiveTurnoversDetails","selectUnitsSummaryByProperty","selectUnitsSummaryByPropertyLoading","selectActiveTurnoversSummary","selectActiveTurnoversSummaryLoading","selectUnitDetails","selectActiveTurnoversDetailsLoading","selectDelinquencyByUnit","selectDelinquencyByUnitLoading","selectDelinquencySummary","selectDelinquencySummaryLoading","selectRenewalsSummary","selectRenewalsSummaryLoading","selectUnitDetailsLoading","selectUnitDetailsByType","selectUnitDetailsByTypeLoading","selectCurrentDashboardViewType","selectLoadRenewalsDetails","selectLoadRenewalsDetailsLoading","selectCurrentDashboardViewTypeSimpleText","simpleText","selectCurrentDashboardViewTypeEnumerationValue","enumerationValue","selectSelectedPortfolioId","selectMyProperties","selectMyPropertiesLoading","selectSelectedDashboardMode","selectCustomBreadcrumbs","selectUnitList","selectUnitListWithActiveTurnover","selectUnitListWithActiveTurnoverLoading","selectUnitListLoading","selectUnit","selectUnitLoading","selectUnitDoNotAutoCreateTurnsLoading","selectRenewalStrategyForUnit","selectRenewalStrategyForUnitLoading","selectJoinProperties","selectCurrentProperty","selectCurrentPortfolio","selectSelectedVacancyLossAttr","selectSelectedVacancyLossThreshold","selectSelectedVacancyLossThresholdKpiType","selectSelectedVacancyLossThresholdKpiTypePerTurn","KpiEffects","kpi_actions","fetch","kpiTypes","dateOffset","trend","trendDays","user_roles_UserRoles","DeleteRoleSummaryDialogComponent","dialog","Unassigned","isUserExisting","D","AdministrationEffects","router","restapiService","userService","adminPanelService","exhaustMap","getUserList","list","lodash","isActive","getPropertyUserList","inactivePropertyUsers","generalRoleToPermissionMapping","allUsers","allUserToGeneralRoleMapping","usersCombinedWithRoles","combineUsersWithGeneralRoles","entry","userId","roleId","transform","associatedRole","create","setUserToGeneralRole","usersToGeneralRoleList","setUserToPropertyRole","userToPropertyRoleList","removeUserFromPropertyRole","deleteUserToPropertyMappings","oldGeneralRoles","newGeneralRoles","oldRole","allGeneralRoles","feedback","message","parsedFeedback","parseGeneralRoleFeedback","usersWithRolesList","acc","open","autoFocus","width","navigate","app_routes_const","then","user_selectors","currentUserGeneralRole","expireCashedUserData","user_actions","inviteUser","selectedProperty","param","errorMessage","email","setUserData","info","firstName","reduce","keyValuePair","key","parseInt","SystemConfigurationEffects","systemConfigService","system_configuration_actions","getSystemConfig","systemConfig","deleteSystemConfig","pmsCredential","updateSystemConfig","addSystemConfig","getTimerReport","timerReport","getChatHooksChannels","channels","setPropertyChatChannel","channelIds","BidsService","bidList","bid","reject","getBid","bidId","setAttachment","attachmentToEntity","getTurnoverBids","turnoverId","getCompanyBids","companyId","getAllBids","deleteBidAttachment","attachmentId","delete","getBidAttachments","createBulkScope","bulkScope","getBulkScopeList","getBulkScope","bulkScopeId","updateBulkScope","addUnitsToBulk","addBulkTurnoversAttachment","BulkBidsEffects","bidsService","bulk_and_scope_actions","bulkList","attachment","PunchService","loadPunchById","punchId","loadPunchesByTurnoverId","createPunch","punch","updatePunch","PunchEffects","punchService","punch_actions","iif","TurnoverBidsService","add","model","accept","approve","approved","uploadInvoice","fileUploadId","categoryList","addCategory","TurnoverBidsEffects","turnoverBidsService","fileUploadsService","turnover_bids_actions","bids","uploadFile","file","upload","categories","categoryId","UpdateWorkflowStepAssigneeModelFunction","workflow","workflowStepAssignmentModel","userData","workflowStepEnumType","responsiblePartyId","responsiblePartyType","responsiblePartyGroupType","userType","AppliancesService","getAppliance","applianceId","TurnoversEffects","workflowActionsService","ticketsService","companiesService","appliancesService","workflowStepCommentsService","responsiblePartiesService","turnovers_actions","postTurnoverModel","activeWorkflowStepType","getWorkflowAssignmentsByStepId","restWorkflowStepAssignmentModel","getTurnover","ex","moveToNextStep","workflowAction","nextWorkflowStep","assigneeId","getResponsiblePartiesByPropertyId","defaultTurnoversAssignees","property","addedAttachment","preventReloadList","turnoverIds","updateAttachment","getTicketsByTurnover","turnoverTicketList","turnoverTicket","newTurnoverTicket","success","editedTicket","getTicket","ticketId","ticket","turnovers_selectors","addedTicketAttachment","ticketType","ticket_type","restTicketModel","getTicketAttachment","attachments","ticketAttachments","getCompanyList","newBidList","updatedBid","addedBidAttachment","appliance","getWorkflowStepComments","workflowStepCommentList","commentItem","turnoverDataId","stepId","workflowAssignment","workflowStepAssigneeId","deleteTurnover","deleteTurnoverAttachment","fileId","removeFile","getTurnoversAttachments","allAttachments","allPropertyIds","toggleAllSections","active","activePropertyIds","toggleSingleSection","selectInactiveFilteredPropertyIds","inactiveFilteredPropertyIds","dashboards_store","getTurnoversTimers","timers","updateTurnoversTimers","setWorkflowStepAssignee","step","ngrx_store","newBulkScopeInProgress","newBulkScopeInStatus","newBulkScopeInId","bulkScopeLoading","bulkScopeListLoading","bulkScopeList","updateBulkScopeInProgress","updateBulkScopeInStatus","allBidList","allBidListLoading","addUnitsInProgress","SharedStoreModule","portfolio_store_module","turnover_configuration_store_module","template_store_module","dashboard_effects","system_configuration_reducer","dashboards_reducer","metaReducers","kpi_reducer","dashboard_filter_reducer","administration_reducer","turnovers_reducer","punch_reducer","turnover_bids_reducer","dashboardFilterTransientFeatureKey","selectDashboardsStateTransient","selectTurnoversFilters","turnoversFilters","setTurnoversFilters","resetTurnoversFilters","auditMode","_shared_enums_turnover_audit_mode__WEBPACK_IMPORTED_MODULE_0__","InspectionStatus","InspectionItemStatus","InspectionType","TimezoneService","rxjs__WEBPACK_IMPORTED_MODULE_1__","currentTimezone","getPms","getList","set","wasInitilized","currentTimezoneValue","utcOffsetMinutes","rxjs__WEBPACK_IMPORTED_MODULE_3__","getCurrentDateOnly","Date","getCurrentDate","toDateString","_timezone_helper__WEBPACK_IMPORTED_MODULE_4__","addTimezoneForEntity","f","currentTimezone$","rxjs__WEBPACK_IMPORTED_MODULE_6__","timezone","TimezoneEntityHelperCommon","static","dateString","test","vanilaDates","nestedObjects","dataWithoutTimezone","field","some","find","timezone_helper","_a","isStringLikeServerDate","fixTimezoneForModelToServer","fixTimezoneForModelToClient","TimezoneEntityHelper","_b","Reflect","timezone_entity_helper_a","fixTimezoneForArchivedTurnoverDataModel","tz","fixTimezoneForTurnStepScheduleModelToClient","fVanila","fFullDate","fModel","turnoverStartDate","turnoverEndDate","TimezoneHelper","date","convertedDate","getTimezoneOffset","correctedDate","newTimezone","oldTimezone","replaceTimezone","getSystemConfigSuccess","getSystemConfigError","updateSystemConfigSuccess","updateSystemConfigError","getTimerReportSuccess","getTimerReportError","getChatChannels","getChatChannelsSuccess","getChatChannelsError","setPropertyChatChannels","setPropertyChatChannelsSuccess","setPropertyChatChannelsError","setSystemSectionExpanded","systemConfigurationFeatureKey","systemConfigLoading","timerReportLoading","updateSystemStatus","updateSystemInProgress","chatHooksChannels","expandedSections","API","Hooks","DateTime","TimerReport","_system_configuration_actions__WEBPACK_IMPORTED_MODULE_1__","section","getTurnoverConfigurationList","getTurnoverConfigurationListSuccess","getTurnoverConfigurationListFailure","getTurnoverConfigurationByWorkflowStep","getTurnoverConfigurationByWorkflowStepSuccess","getTurnoverConfigurationByWorkflowStepFailure","updateTurnoverFieldConfiguration","updateTurnoverFieldConfigurationSuccess","updateTurnoverFieldConfigurationFailure","getElapsedDaysThresholds","getElapsedDaysThresholdsSuccess","getElapsedDaysThresholdsFailure","updateElapsedDaysThresholds","updateElapsedDaysThresholdsSuccess","updateElapsedDaysThresholdsFailure","loadFinish","loadFinishSucceded","loadFinishFailed","addFinish","addFinishSuccess","addFinishFailure","updateFinish","updateFinishSuccess","updateFinishFailure","deleteFinish","deleteFinishSuccess","deleteFinishFailure","TurnoverConfigurationStepAssigneesService","getResponsibleParties","getResponsiblePartiesByPortfolioId","createResponsibleParties","workflowList","updateResponsibleParties","turnoverConfigurationFeatureKey","isLoading","turnoverConfig","turnoverConfigLoading","turnoverConfigUpdateInProgress","turnoverStepConfigLoading","turnoverStepConfig","thresholdsConfiguration","thresholdsConfigurationLoading","thresholdsConfigurationUpdate","thresholdsConfigurationUpdateInProgress","finishTypes","finishInProgress","_actions_turnover_configuration_actions__WEBPACK_IMPORTED_MODULE_1__","selectTurnoverConfigurationState","_reducers__WEBPACK_IMPORTED_MODULE_0__","selectTurnoverStepConfigLoading","selectTurnoverConfig","turnoverConfigState","selectTurnoverConfigLoading","selectTurnoverConfigUpdateInProgress","selectTurnoverStepConfig","selectThresholdsConfigurationLoading","selectThresholdsConfiguration","selectFinishes","selectThresholdsConfigurationUpdate","selectThresholdsConfigurationUpdateInProgress","selectFinishInProgress","TurnoverConfigurationEffects","turnoverConfigService","turnover_configuration_actions","getTurnoverConfigList","getTurnoverConfigListByWorkflowType","getFinishTypes","addFinishType","finish","enumerations_actions","updateFinishType","deleteFinishType","TurnoverConfigurationStoreModule","reducers","loadAllUserPortfolios","loadAllUserPortfoliosSuccess","loadAllUserPortfoliosFailed","loadPortfolioDetails","loadPortfolioDetailsSuccess","loadPortfolioDetailsFailed","loadPropertyDetails","loadPropertyDetailsSuccess","loadPropertyDetailsFailed","updatePortfolioName","updatePortfolioAutoAdd","updatePortfolioDetails","updatePortfolioDetailsSuccess","updatePortfolioDetailsFailed","addPropertyToPortfolio","removePropertyFromPortfolio","createNewPortfolio","deletePortfolio","clearPortfolioData","loadPropertyManagers","loadPropertyManagersSucceeded","loadPropertyManagersFailed","updateProperty","updatePropertyFailed","loadAllUserUnassignedProperties","loadAllUserUnassignedPropertiesSucceeded","loadAllUserUnassignedPropertiesFailed","loadPropertyManagersForProperty","loadPropertyManagersForPropertySuccess","loadPropertyManagersForPropertyFailed","removePropertyManagers","removePropertyManagersSuccess","removePropertyManagersFailed","setPropertyManagers","setPropertyManagersSuccess","setPropertyManagersFailed","changePropertyManagers","getPropertyUnits","changePropertyManagersSuccess","changePropertyManagersFailed","getPropertyUnitsSuccess","getPropertyUnitsFailed","getUnitAttachments","getUnitAttachmentsSuccess","getUnitAttachmentsFail","setUnitAttachment","setUnitAttachmentSuccess","setUnitAttachmentFail","deleteUnitAttachment","deleteUnitAttachmentSuccess","deleteUnitAttachmentFailed","deleteFileFromRepository","deleteFileFromRepositorySuccess","deleteFileFromRepositoryFailed","clearPropertyData","portfolioFeatureKey","propertyManagersForPropertyLoading","allPropertyManagersLoading","unitAttachmentsLoading","deleteUnitAttachmentInProgress","deleteUnitAttachmentStatus","_portfolio_actions_portfolio_actions__WEBPACK_IMPORTED_MODULE_0__","deletePortfolioOngoing","portfolioDetailsLoading","portfolioUpdateOngoing","portfolioNewPropertyUpdateOngoing","portfolioRemovePropertyUpdateOngoing","portfolioDetails","propertyDetailsLoading","propertyDetails","propertyDetailsUpdateOngoing","_shared_actions_user_actions__WEBPACK_IMPORTED_MODULE_1__","userPropertiesLoading","userProperties","properties","unassignedPropertiesLoading","unassignedProperties","allPropertyManagers","propertyManagers","propertyManagersForProperty","unitAttachments","propertyUnitsLoading","propertyUnits","setUnitAttachmentInProgress","_shared_enums_update_status__WEBPACK_IMPORTED_MODULE_2__","selectPortfolioState","_reducers_portfolio_reducer__WEBPACK_IMPORTED_MODULE_0__","selectPortfolios","portfolioState","selectPortfoliosLoading","selectPortfolioDetails","selectPortfolioDetailsLoading","selectPropertyDetails","selectPropertyDetailsLoading","selectPropertyDetailsUpdateOngoing","selectProperties","selectPropertiesLoading","selectPortfolioUpdate","selectPortfolioNewPropertyUpdateOngoing","selectPortfolioRemovePropertyUpdateOngoing","selectPortfolioDeleteOngoing","selectUnassignedProperties","selectUnassignedPropertiesLoading","selectPropertyManagersForProperty","selectAllPropertyManagers","selectAllPropertyManagersLoading","selectPropertyUnits","selectPropertyManagersForPropertyLoading","selectPropertyUnitsLoading","selectUnitAttachments","selectDeleteUnitAttachmentInProgress","selectUnitAttachmentsLoading","selectDeleteUnitAttachmentStatus","PortfolioEffects","propertiesService","unitsService","portfolio_actions","getAllUserProperties","getAllUserUnassignedProperties","portfolio_selectors","updatedPortfolioDetails","doNotRefetchPortfolios","autoAddNewProperties","preleaseFilterMode","propertyIds","getPropertyManagers","getPropertyManagersForProperty","managerList","propertyManagerModels","replacePropertyManagers","oldManager","newManager","attachmentType","attachment_type","targetAttachmentType","PortfolioStoreModule","portfolio_reducer","loadAllSpaceTemplates","loadAllSpaceTemplatesSuccess","loadAllSpaceTemplatesFailed","createNewSpaceTemplate","updateSpaceTemplateDetails","updateSpaceTemplateDetailsFailed","deleteSpaceTemplate","clearSpaceTemplateData","loadAllCategories","loadAllCategoriesSuccess","loadAllCategoriesFailed","spaceTemplateFeatureKey","listItemsLoading","entityUpdateOngoing","deleteEntityOngoing","_space_template_actions__WEBPACK_IMPORTED_MODULE_0__","listItems","categoriesList","unitTypes","selectSpaceTemplateState","_space_template_reducer__WEBPACK_IMPORTED_MODULE_0__","selectSpaceTemplates","spaceTemplateState","selectSpaceTemplatesLoading","selectTemplateUpdate","selectTemplateDeleteOngoing","selectCategories","loadSurveyTemplates","saveSurveyTemplate","saveSurveyTemplateSuccess","saveSurveyTemplateFailure","loadSurveyTemplatesSuccess","loadSurveyTemplatesFailure","addInspectionSurveyTemplate","updateInspectionSurveyTemplate","saveInspectionSurveyTemplateSuccess","saveInspectionSurveyTemplateFailure","SurveysEffects","surveysService","_ngrx_effects__WEBPACK_IMPORTED_MODULE_7__","_main_application_survey_creator_actions_surveys_actions__WEBPACK_IMPORTED_MODULE_0__","getSurveyTemplates","rxjs_operators__WEBPACK_IMPORTED_MODULE_9__","rxjs_operators__WEBPACK_IMPORTED_MODULE_10__","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_4__","rxjs__WEBPACK_IMPORTED_MODULE_11__","saveTemplate","survey","rxjs_operators__WEBPACK_IMPORTED_MODULE_12__","_shared_constants_app_routes_const__WEBPACK_IMPORTED_MODULE_1__","inspectionTemplateId","_template_models_template_views__WEBPACK_IMPORTED_MODULE_2__","queryParamsHandling","surveyId","rxjs_operators__WEBPACK_IMPORTED_MODULE_13__","_template_store_template_actions__WEBPACK_IMPORTED_MODULE_3__","_angular_core__WEBPACK_IMPORTED_MODULE_14__","surveysFeatureKey","surveyTemplates","TEMPLATE_VIEWS","NEW_TEMPLATE","TemplateEffects","surveyService","template_actions","entityDetails","templateDetails","areaId","inspectionTemplateAreas","s","ErrorCode","TemplateStoreModule","surveys_effects","template_reducer","surveys_reducer","loadAllUserTemplates","loadAllUserTemplatesSuccess","loadAllUserTemplatesFailed","createTemplateDetails","updateTemplateDetails","updateTemplateDetailsFailed","deleteTemplate","clearTemplateData","removeAreaFromTemplate","loadAllUnitTypes","loadAllUnitTypesSuccess","loadAllUnitTypesFailed","templateFeatureKey","templateAreaUpdateOngoing","templateAreaRemoveOngoing","templateAreaUpdateStatus","_template_store_template_actions__WEBPACK_IMPORTED_MODULE_2__","_shared_enums_update_status__WEBPACK_IMPORTED_MODULE_1__","getBulkScopeListSuccess","getBulkScopeListFailed","getBulkScopeSuccess","getBulkScopeFailed","updateBulkScopeSuccess","updateBulkScopeFailed","resetUpdateBulkScopeStatus","createNewBulkScope","createNewBulkScopeSuccess","createNewBulkScopeFailed","resetNewBulkScopeID","addUnitsToBulkSuccess","addUnitsToBulkFailed","addBulkTurnoversAttachmentSuccess","addBulkTurnoversAttachmentFailed","loadPunchByIdFinished","loadPunchByIdFailed","clearSelectedPunch","loadPunchesByTurnoverIdFinished","loadPunchesByTurnoverIdFailed","clearPunchesByTurnoverId","sendPunch","sendPunchFinished","sendPunchFailed","loadTurnoverBids","loadTurnoverBidsSuccess","loadTurnoverBidsFailed","createTurnoverBid","createTurnoverBidSuccess","createTurnoverBidFailed","acceptTurnoverBid","acceptTurnoverBidSuccess","acceptTurnoverBidFailed","rejectTurnoverBid","rejectTurnoverBidSuccess","rejectTurnoverBidFailed","uploadTurnoverBidInvoice","uploadTurnoverBidInvoiceSuccess","uploadTurnoverBidInvoiceFailed","updateTurnoverBid","updateTurnoverBidSuccess","updateTurnoverBidFailed","removeTurnoverBid","removeTurnoverBidSuccess","removeTurnoverBidFailed","loadTurnoverBidCategories","loadTurnoverBidCategoriesSuccess","loadTurnoverBidCategoriesFailed","addTurnoverBidCategory","addTurnoverBidCategorySuccess","addTurnoverBidCategoryFailed","approveTurnoverBid","approveTurnoverBidSuccess","approveTurnoverBidFailed","createNewTurnover","createNewTurnoverSuccess","createNewTurnoverFailed","resetCreateNewTurnover","clearTurnoverData","getTurnoverData","getTurnoverDataSuccess","getTurnoverDataFailed","setCurrentWorkflowStep","setCurrentWorkflowStepModel","resetWorkflowStepStatus","setTurnoverData","setTurnoverDataFailed","setTurnoverDataSuccess","setWorkflowStepSuccess","setApplianceTypeList","setColorTypeList","setUserList","setUserListModel","setAllUserRadioList","setAllUserList","setCompanyRadioList","setCompanyNameRadioList","setCompanyEmailRadioList","setAttachmentToTurnover","setAttachmentToTurnoverSuccess","setAttachmentToTurnoverFailed","clearAddedAttachment","updateTurnoverAttachment","updateTurnoverAttachmentSuccess","updateTurnoverAttachmentFailed","getTurnoverTickets","getTurnoverTicketsSuccess","getTurnoverTicketsFailed","addNewTurnoverTicket","addNewTurnoverTicketSuccess","addNewTurnoverTicketFailed","resetNewTurnoverTicket","updateTurnoverTicket","updateTurnoverTicketSuccess","updateTurnoverTicketFailed","updateTicketPreview","updateTicketPreviewSuccess","updateTicketPreviewFailed","getSelectedTicket","getSelectedTicketSuccess","getSelectedTicketFailed","deleteTurnoverTicket","deleteTurnoverTicketSuccess","deleteTurnoverTicketFailed","deleteTurnoverTicketAttachment","deleteTurnoverTicketAttachmentSuccess","deleteTurnoverTicketAttachmentFailed","setTicketAttachment","setTicketAttachmentSuccess","setTicketAttachmentFail","clearAddedTicketAttachment","getCompanyListSuccess","getCompanyListFail","getBidTurnoverList","getBidTurnoverListSuccess","getBidTurnoverListFail","getBidCompanyList","getBidCompanyListSuccess","getBidCompanyListFail","getAllBidList","getAllBidListSuccess","getAllBidListFail","clearBid","getBidSuccess","getBidFail","addNewBid","addNewBidSuccess","addNewBidFail","clearNewBidList","newBidInProgress","updateBid","updateBidSuccess","updateBidFail","clearUpdatedBid","rejectBid","rejectBidSuccess","rejectBidFail","updateBidComment","updateBidCommentSuccess","updateBidCommentFail","setBidAttachment","setBidAttachmentSuccess","setBidAttachmentFail","clearAddedBidAttachment","deleteBidAttachmentSuccess","deleteBidAttachmentFailed","getBidAttachmentList","getBidAttachmentListSuccess","getBidAttachmentListFailed","getApplianceSuccess","getApplianceFailed","getWorkflowStepCommentList","clearWorkflowStepCommentList","getWorkflowStepCommentListSuccess","getWorkflowStepCommentListFailed","addWorkflowStepComment","addWorkflowStepCommentSuccess","addWorkflowStepCommentFailed","updateWorkflowStepComment","updateWorkflowStepCommentSuccess","updateWorkflowStepCommentFailed","deleteWorkflowStepComment","deleteWorkflowStepCommentSuccess","deleteWorkflowStepCommentFailed","deleteTurnoverSuccess","deleteTurnoverFailed","deleteTurnoverAttachmentSuccess","deleteTurnoverAttachmentFailed","getTurnoverAttachments","getTurnoverAttachmentsSuccess","getTurnoverAttachmentsFailed","clearTurnoverAttachments","getTicketSuccess","getTicketFailed","getTicketAttachments","getTicketAttachmentsSuccess","getTicketAttachmentsFailed","clearTicketPreview","setStepInfo","cleanTurnoverStore","loadWorkflowAssignmentsByPropertyAndStepId","workflowAssignmentsByPropertyAndStepIdSucceded","workflowAssignmentsByPropertyAndStepIdFailure","assignDefaultWorkflowStepAssignee","assignDefaultWorkflowStepAssigneeFailed","assignDefaultWorkflowStepAssigneeSuccess","reloadAppliancesNeeded","reloadAppliancesNeededEnd","emptyAction","inspectTurnover","updateValidationParams","setStepAssignee","setStepAssigneeSuccess","setStepAssigneeFailed","getDefaultTurnoversAssignees","getDefaultTurnoversAssigneesSuccess","getDefaultTurnoversAssigneesFailed","resetKanbanCounters","setAllPropertyIds","setActiveSections","toggleInactiveFilteredSingleSection","setInactiveFilteredSections","setDisplayedPropertyList","setSectionLostRevenue","loadTurnoverTimers","clearTurnoverTimers","turnoverTimersLoaded","setTurnoverTimers","setTurnoverTimersSuccess","setTurnoverTimersFailed","setEmptyWorkflowStepAssignee","setWorkflowStepAssigneeSuccess","setWorkflowStepAssigneeFailed","START","VacancyLossAttrType","VacancyLostThreshold","VacancyLostThresholdList","None","Medium","High","punchFeatureKey","_actions_punch_actions__WEBPACK_IMPORTED_MODULE_0__","punchesByTurnoverIdLoading","punchesByTurnoverId","selectedPunch","turnoverBidsFeatureKey","turnoverBidsReducer","bidsLoading","bidCategories","bidAdding","_main_application_turnovers_actions_turnover_bids_actions__WEBPACK_IMPORTED_MODULE_0__","turnoversFeatureKey","updatedTurnoverData","emptyTurnoverData","createTurnoverLoading","createdTurnover","turnoverDataLoading","setWorkflowStepStatus","setWorkflowStepLoading","currentWorkflowStep","currentWorkflowStepModel","applianceTypeList","colorTypeList","userList","userListModel","companyRadioList","companyNameRadioList","companyEmailRadioList","addBidAttachmentInProgress","addBidAttachmentStatus","turnoverTicketListLoading","newTurnoverTicketLoading","selectedTicket","selectedTicketLoading","addNewApplianceNeededLoading","isNewApplianceNeededAdd","markApplianceAsDoneLoading","isMarkApplianceAsDone","newBidListInProgress","bidTurnoverList","bidTurnoverListLoading","bidCompanyList","bidCompanyListLoading","editedBid","bidLoading","updatedBidLoading","updatedBidCommentLoading","applianceLoading","workflowStepCommentListLoading","workflowStepCommentUpdateLoading","workflowStepAssignmentLoading","deleteTurnoverInProgress","turnoverDeleteStatus","deleteTurnoverAttachmentInProgress","turnoverDeleteAttachmentStatus","addTurnoverAttachmentInProgress","addTurnoverAttachmentStatus","stepInfo","allAttachmentsLoading","deleteBidAttachmentInProgress","deleteBidAttachmentStatus","bidAttachments","bidAttachmentsLoading","updateTicketInProgress","updateTurnoverAttachmentInProgress","updateTurnoverAttachmentStatus","ticketLoading","ticketAttachmentsLoading","ticketUpdateInProgress","ticketUpdateInProgressStatus","inspectTurnoverId","validationParams","updateStepAssigneeInProgress","updateStepAssigneeStatus","defaultTurnoversAssigneesLoading","allUserRadioList","allUserList","displayedPropertyList","sectionsLostRevenue","rejectBidLoading","_main_application_turnovers_actions_turnovers_actions__WEBPACK_IMPORTED_MODULE_0__","lostRevenue","selectPunchState","_reducers_punch_reducer__WEBPACK_IMPORTED_MODULE_0__","selectPunchesByTurnoverId","selectSelectedPunch","selectPunchesByTurnoverIdLoading","selectTurnoverBidsState","_main_application_turnovers_reducers_turnover_bids_reducer__WEBPACK_IMPORTED_MODULE_0__","selectTurnoverBids","selectTurnoverBidCategories","selectTurnoverBidAdding","selectTurnoverBidsLoading","selectTurnoversState","_main_application_turnovers_reducers_turnovers_reducer__WEBPACK_IMPORTED_MODULE_0__","selectCreatedTurnover","turnoversState","selectCreateTurnoverLoading","selectTurnoverData","selectTurnoverUnitName","unitName","selectTurnoverDataId","selectUpdatedTurnoverData","selectTurnoverDataLoading","selectEmptyTurnoverData","selectSetWorkflowStepLoading","selectSetWorkflowStepStatus","selectNextWorkflowStep","selectCurrentWorkflowStep","selectCurrentWorkflowStepModel","selectApplianceTypeList","selectColorTypeList","selectUserList","selectIsNewApplianceNeededAdd","selectAddNewApplianceNeededLoading","selectAllUserRadioList","selectAllUserList","selectListModel","selectCompanyRadioList","selectCompanyNameRadioList","selectCompanyEmailRadioList","selectAddedTicketAttachment","selectAddedAttachment","selectAddedBidAttachment","selectAddBidAttachmentInProgress","selectAddBidAttachmentStatus","selectAddTurnoverAttachmentStatus","selectAddTurnoverAttachmentInProgress","selectUpdateTurnoverAttachmentInProgress","selectDeleteTurnoverAttachmentInProgress","selectUpdateTurnoverAttachmentStatus","selectNewBidList","selectNewBidListInProgress","selectTurnoverTicketList","selectTurnoverTicketListLoading","selectNewTurnoverTicket","selectUpdateTicketInProgress","selectNewTurnoverTicketLoading","selectUpdatedTurnoverTicket","selectSelectedTicket","selectSelectedTicketLoading","selectBidTurnoverList","selectBidTurnoverListLoading","selectAllAttachments","selectAllBidList","selectAllBidListLoading","selectBidCompanyList","selectBidCompanyListLoading","selectUpdatedBid","selectAllAttachmentsLoading","selectBid","selectBidLoading","selectUpdatedBidLoading","selectRejectBidLoading","selectUpdatedBidCommentLoading","selectWorkflowStepCommentList","selectDeleteBidAttachmentInProgress","selectDeleteBidAttachmentStatus","selectBidAttachments","selectBidAttachmentsLoading","selectAppliance","selectApplianceLoading","selectWorkflowStepCommentListLoading","selectDeleteTurnoverInProgress","selectWorkflowStepCommentUpdateLoading","selectWorkflowAssignmentAssigneeId","selectWorkflowAssignmentLoading","selectReloadAppliancesNeeded","selectTurnoverDeleteStatus","selectStepInfo","selectTicket","selectTicketAttachments","selectTicketLoading","selectTicketUpdateInProgress","selectTicketAttachmentsLoading","selectTicketUpdateInProgressStatus","selectInspectTurnoverId","selectValidationParams","lockFields","nextStepAvailable","saveAvailable","nextStepChecking","customMessage","selectAllPropertyIds","selectActivePropertyIds","selectIsActiveSection","selectIsInactiveFilteredSection","selectUpdateStepAssigneeInProgress","selectDefaultTurnoversAssignees","selectUpdateStepAssigneeStatus","selectDefaultTurnoversAssigneesLoading","selectDisplayedPropertyList","selectTurnoverTimers","selectSectionsLostRevenue","turnoverState","loadEnumerations","loadEnumerationsSuccess","loadEnumerationsFailed","loadFileUploads","uploadFileSuccess","clearUploadedFile","uploadFileFail","deleteFile","deleteFileSuccess","deleteFileFailed","setPreviousRoute","loadTenantData","loadUserTenantSucceeded","loadUserTenantFailed","loadUserData","loadUserDataSucceded","loadUserDataFailed","loadUserById","loadUserByIdSucceded","loadUserByIdFailed","setUserGeneralRole","setAuthenticated","loadAllUserProperties","loadAllUserPropertiesSucceeded","loadAllUserPropertiesFailed","setWindowWidth","AppRoutes","HOME","_shared_enums_route_path_enum__WEBPACK_IMPORTED_MODULE_1__","ROLES","ROLES_ADMIN_HOME","ROLES_ADMIN_PERFORMANCE_METRICS","ROLES_ASSET_HOME","ROLES_ASSET_PROPERTY","ROLES_CONSTRUCTION_HOME","ROLES_PROPERTY_HOME","ROLES_VENDOR_HOME","REPORTS","REPORTS_RENT_ROLL","REPORTS_ROC","REPORTS_BILLING","REPORTS_UNIT_MIX","REPORTS_DELINQUENCIES","REPORTS_RENEWALS","DASHBOARD_ACTIVE_TURNOVERS","DASHBOARD_TICKETS","DASHBOARD_PROPERTY_MGMT","ASSET_MANAGER_HOME_DASHBOARD","PROPERTY_MANAGER_HOME_DASHBOARD","CONSTRUCTION_MANAGER_HOME_DASHBOARD","ADMIN_HOME_DASHBOARD","ADMIN_SUBSECTION_DASHBOARD","INSPECTIONS","SETTINGS_SURVEYS","_shared_enums_management_route_enum__WEBPACK_IMPORTED_MODULE_0__","SETTINGS_TEMPLATE","SETTINGS_SPACE_TEMPLATE","Maintenance","LOGIN","ACCEPT_TOKEN","WIDGET_BOARD_RESCHEDULE","WIDGET_BOARD_DONE","WIDGET_BOARD_COMMENT","ROOT","BOARDS","BUILDIUM","TURNOVERS","TURNOVERS_KANBAN","TURNOVERS_ACTIVE","TURNOVERS_ARCHIVED","TURNOVERS_NOTICE","TURNOVERS_MOVE_OUT_CONFIRMATION","TURNOVERS_SCOPE_AND_BID_APPROVAL","TURNOVERS_MAKE_READY","TURNOVERS_RENOVATION","TURNOVERS_PUNCH","TURNOVERS_MANAGEMENT_APPROVAL","TURNOVERS_LEASE_READY","TURNOVERS_LEASE_UP","TURNOVERS_MOVE_IN","TURNOVERS_ARCHIVE","TURNOVERS_BULK_BIDS","TURNOVERS_DETAIL","JOBS_AVAILABLE_AND_BIDS_SENT","DELINQUENCIES","DELINQUENCIES_DETAIL","RENEWALS","MOVE_OUT","MOVE_OUT_ASSET_MANAGER","MOVE_OUT_PROPERTY_MANAGER","MOVE_OUT_ASSET_MANAGER_ARCHIVED","MOVE_OUT_PROPERTY_MANAGER_ARCHIVED","RENEWALS_DETAIL","SETTINGS","SETTINGS_USERS","SETTINGS_ROLES","SETTINGS_ROLES_NEW","SETTINGS_ROLES_EDIT","SETTINGS_RENEWAL_STRATEGY","SETTINGS_KPI","SETTINGS_PORTFOLIO","SETTINGS_VENDOR","SETTINGS_SYSTEM","SETTINGS_TURNOVER_CONFIGURATION","TICKETS","NO_PERMISSION","NoValue","PriorityTypeListConst","_shared_enums_priority_type__WEBPACK_IMPORTED_MODULE_0__","WorkflowStepListConst","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_0__","WorkflowStepListActive","ContentEditableDirective","elementRef","renderer","_value","setAttribute","nativeElement","ngAfterViewInit","MutationObserver","onChange","innerHTML","observe","characterData","childList","subtree","ngOnDestroy","disconnect","onInput","onBlur","writeValue","setProperty","setDisabledState","disabled","String","_angular_core__WEBPACK_IMPORTED_MODULE_0__","provide","useExisting","multi","CustomTooltipComponent","CustomTooltipDirective","overlay","overlayPositionBuilder","showToolTip","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","offsetY","overlayRef","show","hasAttached","tooltipRef","attach","portal","instance","text","contentTemplate","hide","closeToolTip","detach","DropZoneDirective","onDrop","event","preventDefault","dataTransfer","files","kind","getAsFile","clear","fileDrop","emit","clearData","from","onDragOver","stopPropagation","onDragLeave","onBodyDragOver","preventBodyDrop","onBodyDrop","WHITE_LOGO","AttachmentComponentType","PortfolioAttachmentType","PropertyAttachmentType","UnitAttachmentType","TurnoverAttachmentType","ApplianceAttachmentType","BidAttachmentType","LIGHT_GRAY","DEFAULT","cGray","SUPER_USER","EnumerationItemFields","ANGLE_DOWN","KpiType","KpiWindowType","List","AVATAR_USER_CONFIG_LIST","ACCOUNT","PriorityType","RouteData","BREADCRUMB","TicketType","ELAPSED_DAYS","IN_PROGRESS","checkPermissionLevel","permissionList","check","v","getBidCategoriesRadioList","getCompanyRadioList","getDateObjectFunction","_shared_functions_get_utc_function__WEBPACK_IMPORTED_MODULE_0__","getEnumerationRadioListFunction","enumerationItems","nullValueLabel","withNullValue","valueKey","_shared_enums_enumeration_item_fields__WEBPACK_IMPORTED_MODULE_0__","displayText","getPortfolioProperties","localeCompare","lastName","getUserOrVendorList","userGroupType","_shared_enums_user_type__WEBPACK_IMPORTED_MODULE_0__","companyName","getUserOrVendorItems","getUserItems","getInternalUserList","getUtc","parseNumber","toString","replace","parseFloat","PreleaseFilterMode","isRestTurnoverTaskModel","object","isRestTurnoverDataModel","EnumerationValuePipe","enumList","showEmptyValue","defaultEmptyValue","enumItem","pure","EscapeHtmlPipe","FileSizePipe","bytesNumber","kBNumber","toFixed","mBNumber","gBNumber","tBNumber","IsUserExistingPipe","row","NumberValidationPipe","min","max","parsed","_shared_functions_parse_number__WEBPACK_IMPORTED_MODULE_0__","isNaN","TrustHtmlPipe","domSanitized","bypassSecurityTrustHtml","TurnoverAttachmentPipe","attachmentList","fileUploadFeatureKey","fileToUpload","fileToUploadLoading","uploadedFileItem","deleteInProgress","deleteStatus","_shared_actions_file_upload_actions__WEBPACK_IMPORTED_MODULE_0__","pathInitialValue","storageValue","getItem","parsedValue","hydrationMetaReducer","featureKey","enumerationsLoading","enumerations","user_reducer_reducer","isAuthenticated","tenantData","user_reducer_initialState","selectedUserLoading","selectedUser","CORE_FEATURE_KEY","enumeration","file_upload_reducer","window_resize_reducer","route_reducer","routeStateFeatureKey","previousRoute","_shared_actions_route_state_action__WEBPACK_IMPORTED_MODULE_0__","windowResizeFeatureKey","windowWidth","_shared_actions_window_resize_actions__WEBPACK_IMPORTED_MODULE_0__","selectCoreModule","selectEnumerationState","_core_selector__WEBPACK_IMPORTED_MODULE_0__","coreState","selectLoadEnumerations","enumerationState","selectLoadEnumerationsLoading","selectDashboardViewType","selectDelinquencyResultsEnumeration","selectWorkflowPhasesEnumeration","workflowPhases","delinquencyResultTypes","selectRenewalResultTypesEnumeration","selectWorkflowStepsEnumeration","workflowSteps","renewalResultTypes","selectFinishTypesEnumeration","finishType","selectTimerTypesEnumeration","timerTypes","selectNativeLanguagesEnumeration","selectPmsTypesEnumeration","pmsTypes","nativeLanguage","selectUserState","selectUserData","userState","selectUserGeneralRole","selectUserId","selectUserName","selectUserPermissionLevel","selectIsAuthenticated","selectTenantData","selectSelectedUser","selectSelectedUserLoading","_auth0_angular_jwt__WEBPACK_IMPORTED_MODULE_0__","AuthService","oidcService","accessToken","getAccessToken","watchForAccessToken","_angular_core__WEBPACK_IMPORTED_MODULE_2__","_auth0_angular_jwt__WEBPACK_IMPORTED_MODULE_1__","HelpRouterService","activatedRoute","getGlobalPreservedParams","queryParams","snapshot","_shared_enums_route_data__WEBPACK_IMPORTED_MODULE_0__","WindowResizeEffects","EnumerationEffects","FileUploadEffects","file_upload_actions","uploadedFile","attachmentSection","TenantService","getTenant","UserEffects","tenantService","getCashedUserData","getUserById","TokenInterceptor","oidcSecurityService","intercept","request","token","clone","setHeaders","Authorization","v4","handle","throwError","SharedModule","auth0_angular_jwt","http","useClass","imports","common","AttachmentItemComponent","fileUploadService","deleteConfirmation","deleteEvent","copyLink","copyToClipboard","selBox","createElement","left","top","opacity","appendChild","focus","execCommand","removeChild","attachmentItem","externalUrl","newAttachmentItem","link","download","getLink","startsWith","i0","InputFileComponent","EventEmitter","BehaviorSubject","setValue","valueChanges","untilDestroyed","uploadingFile$","statusChanges","browseFile","input","click","$event","clearEvent","filesDropped","uploadSelection","emitEvents","inputFileChanged","target","filesList","Object","entries","selectFilesEvent","checkSupportedFormatFunction","acceptedFormatList","acceptedFormats","SnackbarErrorMessage","uploadingProgress$","uploadFileProgress","HttpEventType","progress","Math","round","loaded","total","HttpResponse","UntilDestroy","AttachmentComponentForm","AttachmentComponent","File","Link","setIsTouched","cleanInputAttachment","_attachmentItem","currentLink","attachmentItemEvent","keepSelection","debounceTime","valid","fesm2020_forms","urlRegex","submitLink","attachment_component_decorate","AttachmentsListComponent","ButtonComponent","_shared_enums_button_type__WEBPACK_IMPORTED_MODULE_1__","buttonClick","clickEvent","CalendarHeaderComponent","_intl","calendar","_dateAdapter","_dateFormats","stateChanges","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_2__","periodLabel","format","activeDate","display","monthYearA11yLabel","previousClicked","addCalendarMonths","nextClicked","_angular_material_datepicker__WEBPACK_IMPORTED_MODULE_5__","_angular_material_core__WEBPACK_IMPORTED_MODULE_6__","isBrowser","window","isFirefox","mozInnerScreenX","getValue","el","isInputOrTextAreaElement","textContent","insertValue","start","end","iframe","noRecursion","isTextElement","nodeName","val","substring","setCaretPosition","selObj","getWindowSelection","rangeCount","getRangeAt","startOffset","anchorNode","pos","selectionStart","setSelectionRange","range","getDocument","createRange","setStart","collapse","sel","removeAllRanges","addRange","getCaretPosition","slice","selRange","preCaretRange","cloneRange","selectNodeContents","setEnd","endContainer","endOffset","contentWindow","getSelection","getContentEditableCaretCoords","markerId","getTime","random","substr","doc","prevRange","markerEl","createTextNode","insertNode","coordinates","offsetHeight","localToRelativeCoordinates","element","obj","parent","offsetLeft","clientLeft","offsetTop","clientTop","offsetParent","scrollTop","scrollLeft","parentNode","ctx_r8","MentionListComponent","ngAfterContentChecked","itemTemplate","defaultItemTemplate","nativeParentElement","coords","getCaretCoordinates","Error","debug","querySelector","div","computed","getComputedStyle","currentStyle","isInput","whiteSpace","wordWrap","visibility","prop","boxSizing","height","outerHeight","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","targetHeight","lineHeight","scrollHeight","overflowY","overflow","span","borderLeftWidth","backgroundColor","offset","getBlockCursorDimensions","context","documentElement","pageXOffset","pageYOffset","caretRelativeToView","parentRelativeToContainer","getBoundingClientRect","positionElement","activeItem","activeIndex","activateNextItem","listEl","activeEl","getElementsByClassName","nextLiEl","nextSibling","nextLiRect","bottom","clientHeight","activatePreviousItem","prevLiEl","previousSibling","checkBounds","dropUp","bounds","innerWidth","className","parentStyles","fontSize","MentionDirective","_element","_componentResolver","_viewContainerRef","triggerChar","labelKey","maxItems","allowSpace","returnTrigger","mentionSelect","activeConfig","mentionFilter","searchString","searchStringLowerCase","toLowerCase","mention","mentionItems","ngOnChanges","changes","mentionConfig","updateConfig","triggerChars","addConfig","mentions","defaults","assign","DEFAULT_CONFIG","disableSort","updateSearchList","setIframe","stopEvent","wasClick","stopImmediatePropagation","blurHandler","stopSearch","inputHandler","lastKeyCode","keyCode","charCodeAt","keyHandler","inputEvent","isComposing","charPressed","charCode","which","shiftKey","fromCharCode","startPos","startNode","searching","showSearchList","searchTerm","searchList","hidden","metaKey","altKey","ctrlKey","itemSelected","evt","createEvent","initEvent","dispatchEvent","startSearch","closed","matches","objects","disableSearch","opened","componentFactory","resolveComponentFactory","componentRef","createComponent","mentionListTemplate","itemClick","fakeKeydown","styleOff","disableStyle","requestAnimationFrame","ContentEditableAreaComponent","custom_control_abstract","emojiService","trim","stringNotEmptyValidator","r","RegExp","x","emojis","native","shortName","shortNameResults","k","keywordResults","keywords","attrDisable","disable","enable","convertValueToHtml","useEmoji","setMentions","defaultMentionConfig","defaultEmojiMentionConfig","convertValueToString","blurEvent","enter","keydownEnterEvent","observed","send","space","validateInput","insertBr","selection","fragment","createDocumentFragment","append","mentionItemSelected","node","setTimeout","nodeRange","Range","setStartAfter","setEndAfter","collapseToEnd","emoji","editInput","emitModelToViewChange","strContent","htmlContent","querySelectorAll","m","replaceWith","getAttribute","keys","EMOJI_MAPPING","regex","colons","getValueLength","addEmoji","storedSelectionRange","emmojiMenu","closeMenu","storeSelection","contains","startContainer","emojiText","mapValue","emojiNode","deleteContents","menu","RetrievingCompanyList","CustomizedSnackbarComponent","dismiss","snack_bar","SnackBarCss","NotificationPositionCss","Success","SnackbarService","snackBar","sidePanelService","WithSidePanel","watchForSidePanel","isSidePanelExpanded$","positionCss","WithoutPanel","duration","openNotification","Failure","Info","closable","Warning","cssClass","snackBarRef","openFromComponent","panelClass","horizontalPosition","DateDropdownComponent","_app_components_abstract_custom_control_abstract__WEBPACK_IMPORTED_MODULE_1__","timezoneService","locale","_angular_forms__WEBPACK_IMPORTED_MODULE_8__","_app_modules_ui_components_components_calendar_header_calendar_header_component__WEBPACK_IMPORTED_MODULE_2__","labelCss","_labelCss","labelInside","labelInsideDefaultCss","labelOutsideDefaultCss","emitEvent","isDisabled","labelRequired","hasValidator","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_9__","dateRangeConfig","_angular_material_datepicker__WEBPACK_IMPORTED_MODULE_10__","rxjs_operators__WEBPACK_IMPORTED_MODULE_11__","attrClickableDisable","isOpened","disabledClickEvent","dateMenuTrigger","valueTyped","preparedValue","dt","moment__WEBPACK_IMPORTED_MODULE_0__","isValid","toDate","updateCursor","dateClass","today","onSelect","onSelectSingleDate","selectRange","selectedRangeEvent","maskControl","_angular_common__WEBPACK_IMPORTED_MODULE_12__","displayMask","dateToggleMenu","openDateMenu","errorDisabledText","openMenu","DividerComponent","IconService","getIconTemplate","icon","color","secondColor","uniqueId","uniqueSvgIconId","getSvgBeginTemplate","getPath","d","fill","getSvgEndTemplate","getRectangle","y","rx","getUrlClip","getEndUrlClip","getDefsPart","getClipPath","getClipPathRect","endClipPath","endDefsPart","getCircle","cx","cy","stroke","strokeWidth","getOpenUrlClip","viewBox","params","getColorFill","getColorStroke","getStrokeWidth","getX","getY","IconComponent","iconService","svg","iconHeight","iconWidth","iconColor","iconSecondColor","iconTemplate","AutoresizeDirective","resize","formControl","appAutoresize","textArea","newHeight","maxHeight","InputAreaComponent","distinctUntilChanged","insertNewline","newValue","InputErrorComponent","inputErrorService","validationMessages","errorParams","getValidationMessage","InputErrorService","validator","requiredLength","InputComponent","_app_components_abstract_custom_control_abstract__WEBPACK_IMPORTED_MODULE_0__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_4__","inputControl","keydownEnter","removeFocus","blur","RadioButtonDropdownComponent","valueCss","_valueCss","optionCss","_optionCss","controlSectionItems","controlItems","transformValueList","sortSection","flat","transformValue","listLoading","_listLoading","_labelElement","labelWidth","clientWidth","ngDoCheck","initControl","autoSortList","lodash__WEBPACK_IMPORTED_MODULE_0__","_angular_forms__WEBPACK_IMPORTED_MODULE_6__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_7__","searchFunction","term","indexOf","valueChange","hasValue","displayValue","onSelectValueContent","getCustomTransformValue","unsupportedValueLabel","displayLabelAsValue","count","multiple","single","mask","onSelectAll","patchValue","t","onClearAll","onAddNew","addNewClicked","ngSelect","_ng_select_ng_select__WEBPACK_IMPORTED_MODULE_9__","RadioButtonComponent","checkIfEmpty","isEmpty","isEmptyValue","getActiveValidationErrorFunction","activeErrors","required","ReadOnlyFieldComponent","SkeletonLoaderService","getLoaderId","uniqueSkeletonId","selectWindowResizeState","core_selector","selectWindowWidth","windowResizeState","SkeletonLoaderComponent","skeletonLoaderService","loaderType","_loader","loaderId","clipPathUrl","clipPath","updateWidthParams","container","containerWidth","containerHeight","svgViewportWidth","containerPadding","svgViewportHeight","listTemplateWidth","listTemplateItemOffset","pieChartTitleWidth","pieChartTitleX","cYPosition","cXPosition","cRadius","pieChartLegendDotX","pieChartLegendItemX","kanbanTitleSectionWidth","kanbanSections","kanbanTileWidth","tileOffset","kanbanTileXOffset","detailsSingleHeight","detailsSingleWidth","commentListCommentWidth","recSectionVendorWidth","recSectionAttachmentsWidth","recSectionAttachmentsBtnWidth","recSectionAttachmentsBtnOffset","recSectionExpWidth","recSectionNoteWidth","recSectionVendorsItemsXOffset","recSectionVendorsItemsWidth","SlideToggleComponent","_pendingChange","viewToModelUpdate","_angular_common__WEBPACK_IMPORTED_MODULE_4__","_angular_material_slide_toggle__WEBPACK_IMPORTED_MODULE_5__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_6__","TableEmptyContentComponent","_angular_core__WEBPACK_IMPORTED_MODULE_6__","UserSelectDropdownComponent","enumerationValuePipe","prepareUsersList","myOptionItem","showMyOption","myLabel","allOptionItem","showAllOption","allLabel","rxjs__WEBPACK_IMPORTED_MODULE_8__","bothLists","vendorList","userListRaw","vendorListRaw","Employee","Contractor","_shared_functions_get_user_list_function__WEBPACK_IMPORTED_MODULE_2__","userName","vendorName","DefaultModalConfigConstant","DialogResult","CustomInspectionSaveTemplateDialogComponent","customInspectionService","inspectionName","templateInput","doNotShowAgain","inspectionTemplateContent","isRequired","input_component","CustomInspectionHeaderComponent","board_abstract_component","enterEditMode","editMode","headerName","nameChanged","leaveEditMode","header","headerChanged","CustomInspectionItemComponent","cdk","_handles","_results","itemName","enterPressed","itemCheckedChange","itemChecked","itemNameChange","removeClick","remove","drag_drop","custom_inspection_item_component_decorate","CustomInspectionDialogComponent","custom_inspection","cellData","boardEventService","getBoardConfig","boardConfig","columnConfiguration","columnSettings","doNotShowSaveTemplateDialogOnClose","isTemplateMode","isUnitModeAvailable","inspectionContent","itemsChanges$","showSwitcher","isItemsLoading","backdropClick","keydownEvents","activeInspectionContent","changeMode","trackById","_index","openSaveTemplateDialog","onClose","openCustomInspectionSaveTemplateModal","customInspectionIsRequired","showDoNotShowAgain","afterClosed","customNamedItemMaxNumber","prev","inspectionItems","addColumnButtonContainer","scrollIntoView","itemInner","removeTemplate","operators_filter","dialog_result_enum","headerChange","cancelColor","createNewTemplate","updateCurrentTemplate","inspectionTemplateName","getBoard","phElement","placeholder","setStyle","highLightHeader","drop","insertBefore","source","children","sourceIndex","targetIndex","drag","dropElement","dragIndex","__indexOf","dropContainer","dropIndex","sourceElement","parentElement","_dropListRef","_dragRef","collection","prototype","custom_inspection_dialog_component_decorate","ScheduleAmountDialogComponent","amount","parse_number","keyUp","getEmployeeRadioList","employeeList","NewCustomTemplateOption","ScheduleCellDialogComponent","dueDate","Validators","isVendor","vendor","remember","notifyAssignee","note","take","pmses","isReschedule","propertyUserListLoading$","controls","startWith","pairwise","initialize","formReady","vendorId","vendorAssigneeList","company","rememberAssignee","formValue","updateColumnStore","isInspectionTemplatesLoading$","templatesLoading$","templatesList","inspectionTemplates","inspectionTemplatesOptions","undefined","ok","_this","cellValue","moment","getDialogResult","systemConfigPmsName$","pmsName","_this2","addNewCustomTemplate","inspectionType","assigneeEmail","newCustomTemplate","customInspectionMaxNumber","_this3","firstValueFrom","focusOnComment","showNote","addNewVendor","openNewVendorModal","addNewVendorAssignee","selectedVendor","openVendorUserModal","invitedUser","MAT_DIALOG_DATA","schedule_cell_dialog_component_decorate","ScheduleDoneDialogComponent","rememberIt","boardName","inputItem","outputName","schedule_done_dialog_component_decorate","AddBidModalComponent","FormGroup","UntypedFormControl","bidAmount","bidDate","inProgress$","fileUploaded","formSubmitted","draftInvoiceFileUploadId","turnoverDataBidCategoryId","ofType","addNewCategory","openPrompt","fieldName","Boolean","first","add_bid_modal_component_decorate","UserPreviewFields","combineUserWithProperties","allProperties","propertyMapping","userPropertiesMappings","userMappedProperties","mapping","userProperty","formatPropertyStructureToTree","root","propertiesIndexMap","singleProperty","parentId","parentIndex","console","warn","FirstName","UserExistsValidator","emailAddressList","userAlreadyExists","UserInactiveValidator","userInactive","PropertyType","doForAllTreeNodes","treeModel","callback","roots","doForAllNodes","child","SelectTreeComponent","mouse","checkboxClick","bind","useCheckbox","useVirtualScroll","nodeHeight","actionMapping","updatePlaceholderAndEmit","treeInitialized","selectNodes","selectedNodes","clearSelection","tree","selectedLeafNodeIds","clearAll","hasNodesSelected","selectionObject","values","propertiesToSelect","treeNode","filterTree","filterNodes","allParentsName","getAncestorsName","collapseAll","expandRoot","expand","onListOpen","onListClose","selectionValue","toggleNodeSelection","isSelected","selectedNodeIds","selectedLeaves","selectedRoots","isRootSelected","getSelectedNodes","expandedNodeIds","expanderClick","hasChildren","onlySelectedNodes","isChecked","getSelectedRootsRecursive","nodes","getSelectedLeavesRecursive","propertyType","childNode","clearFilter","sizeChanged","filterString","selectParentIfNeeded","deselectAncestorsIfNeeded","isNodeSelected","nodeToCheck","circlon_angular_tree_component","AddVendorUserModalComponent","saveButtonText","phoneNumber","companyListLoading$","allRoles","vendorRoleId","nativeLanguages","existingActiveEmails","existingInactiveEmails","addValidators","operationsInProgress","arePropertiesChanged","selectedProperties","EmailPatternValidator","selectedRootsChange","add_vendor_user_modal_component_decorate","GalleryModalComponent","toolbar","zoomIn","zoomOut","oneToOne","play","size","rotateLeft","rotateRight","flipHorizontal","flipVertical","deleteAttachmentInProgress$","attachmentsBSubject","getDeleteConfirmationLabels","viewer","Viewer","imagesList","viewerOptions","destroy","deleteItem","ElementRef","gallery_modal_component_decorate","InfoModalComponent","confirm","NextStepAssigneeModalComponent","propertyName","updateInProgress$","getCachedPropertyUserList","next_step_assignee_modal_component_decorate","PromptModalComponent","isSubmitted","getAttachmentToEntityParams","description","originalFileName","selectFileUploadState","selectDeleteStatus","selectUploadedFileParams","fileUploadState","selectFileToUploadLoading","TicketPreviewModalComponent","turnoverAttachmentPipe","detailedInformation","ticketPriorityType","ticketStatusType","ableToResolve","isNew","addNewInProgress$","attachmentItems","ticketAttachmentType","delay","clearNewTicketAttachment","deleteTicketAttachment","deleteNewTicketAttachment","addTicketAttachment","behavior","block","endDate","markAsDone","dateCompleted","stepAssigneeId","createdBy","isTicketDone","ticket_preview_modal_component_decorate","UserPreviewModalComponent","rootNodes","validators","vendroRole","setValidators","updateValueAndValidity","updateUser","currentUserProperties","currentUserPropertyIds","newUserToPropertyMappings","prepareSelectedUserToPropertyMappings","selectedPropertyIds","propertyToDelete","user_preview_modal_component_decorate","NewVendorFields","AddVendorModalComponent","fb","LastName","Email","Company","PhoneNumber","NativeLanguage","addOnlyVendor","existingEmails","add_vendor_modal_component_decorate","CommentTooLongModalComponent","ConfirmationModalComponent","closest","zIndex","doNotShowAgainMessage","updateDialogHiddenState","confirmation_modal_component_decorate","SpaceTemplateModalComponent","helpRouterService","dataSource$","selectSpaceTemplate","spaceTemplate","spaceTemplateId","space_template_modal_component_decorate","TurnoverPunchFields","TurnoverPunchModalComponent","turnoverAttachment","priority","isNewPunch","isCompleted","turnoverUnitName$","punchLowThreshold","stepThresholds","lowThresholdValue","currentDate","defaultDate","setDate","getDate","deletePunchAttachment","deleteNewPunchAttachment","newAttachment","removeAttachmentsIfNeeded","hasAttachments","each","getAttachments","addAttachment","inProgress","DueDate","Priority","Title","Description","attachmentAdded$","isNewTicket","addAttachmentAndWaitForSuccess$","turnover_punch_modal_component_decorate","ModalDialogSizes","xxs","xs","sm","md","lg","ModalsService","nonPmsUnitCost","isDialogHiddenByUser","openInfoModal","openCommentTooLongModal","maxCounter","openGalleryModal","default_modal_config_constant","openNewTurnoverModal","activeProperty","isNonPms","new_turnover_modal_component","minHeight","openNextStepAssigneeModal","disableClose","openTicketPreviewModal","openPunchModal","openNewVendor","add_new_company_modal_component","openScheduleModal","openScheduleDoneModal","openCustomInspectionModal","openEditAmountModal","getAcceptChargesText","nonPmsUnitCost$","cost","version","environment","openUserPreviewModal","openSpaceTemplateModal","addBid","NewTurnoverModalComponent","unitNonPmsService","modalService","datePipe","startWorkflowStepType","noticeValidation","defaultWorkflowStepType","tomorrow","MoveOutDate","customError","selectPropertiesLoading$","unitListLoading$","newTurnoverLoadingInProgress$","UnitId","acceptChargesText","PropertyId","nonPmsUnitMaxNumber","flatMap","nextValue","userPropertiesList","activeProperties","otherProperties","userUnits","getUnitList","successMessage","reloadRoute","isNil","moveOutDate","newTurnover","dateMoveOut","navigateByUrl","skipLocationChange","EMAIL_REGEXP","AdminPanelService","billingReport","startDate","toISOString","runImporterNow","APP_VERSION","AppVersionService","version_timestamp","version_number","pull","emitVersion","setInterval","getCurrentVersion","sessionStorage","appVersion","getVersion","saveCurrentVersion","now","CacheService","getCachedInfo","cacheInfoDictionary","cachedSubject","expired","timestamp","cacheInfo","expiredFromLocalStarage","complete","storageTimestamp","_shared_enums_local_storage_data_enum__WEBPACK_IMPORTED_MODULE_0__","expireCachedInfo","CompaniesService","addNewCompany","updateEmployeeItem","userIds","postCompanyAddressModel","restAddressModel","FileUploadsService","uploadProgress","search","query","ids","cloudUri","KpiService","filterKpiByType","kpiType","avg","precision","filtered","unitsCount","sum","percent","PropertiesService","setPropertyPreleaseFilter","getTurnsWithoutAssignees","RenewalsService","getRenewalDetails","renewalId","updateRenewalDetails","renewalModel","getRenewalList","renewalTargetList","updateRenewalTarget","renewalTargetModels","RestapiServiceWithoutTimezone","appVersionService","composeRoute","src_environments_environment__WEBPACK_IMPORTED_MODULE_1__","generateHeaders","customPatchData","patch","put","formData","FormData","reportProgress","responseType","getUrl","environmentUrl","headers","_angular_common_http__WEBPACK_IMPORTED_MODULE_4__","RestapiService","customTimezoneFixer","_main_application_management_components_system_configuration_components_timezone_entity_helper__WEBPACK_IMPORTED_MODULE_0__","customTimezoneFixerRequest","customTimezoneFixerResponce","rxjs__WEBPACK_IMPORTED_MODULE_7__","newBody","customTimezoneFixerResponse","SidePanelService","isSidePanelExpanded","isSidePanelExpandedSubject","toggleSidePanel","SurveysService","SystemConfigService","buildiumTokenExchange","jwtToken","TicketsService","getTicketsByAssigneeId","getTicketsByPropertyId","TurnoverConfigService","getTenantSettings","saveTenantSettings","tenantSettings","TurnoversService","cacheService","restapiWithoutTimezone","_main_application_management_components_system_configuration_components_timezone_entity_helper__WEBPACK_IMPORTED_MODULE_1__","patchData","path","_main_application_management_components_system_configuration_components_timezone_helper__WEBPACK_IMPORTED_MODULE_5__","updateMoveOutDateSortOrder","boardId","sortOrderValue","updateMoveInDateSortOrder","patchAdditionalData","fixTimezoneForTurnoverTaskModel","getCachedPortfolioTurnovers","getArchivedPortfolioTurnovers","fixTimezoneForArchivedTurnoverTaskModel","restoreTurnover","getWorkflowTemplates","UnitNonPmsService","UnitsService","_err","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_0__","getPropertiesUnits","UserService","getCachedUserList","rxjs_operators__WEBPACK_IMPORTED_MODULE_4__","getCachedUserOrVendorList","getCachedUserListOptions","getUserData","claim","resendInvitationEmail","WorkflowActionsService","stepType","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_2__","moveToNextStepWithDefaultAssignee","getAssignee","assigneeInfo","rxjs__WEBPACK_IMPORTED_MODULE_10__","rxjs__WEBPACK_IMPORTED_MODULE_9__","_shared_interfaces_turnover_interface__WEBPACK_IMPORTED_MODULE_1__","currentAssigneeId","defaultAssigneeId","_angular_core__WEBPACK_IMPORTED_MODULE_12__","WorkflowStepCommentsService","comment","commentId","addReaction","reactionId","encodeURIComponent","deleteReaction","EnvironmentType","Q","ver","authBaseUrl","apiUrl","openApiUrl","notificationsUrl","notificationsAllUrl","disableForm","showAuthorizeLogs","showBuildTime","azureAuthConfig","b2cDirectory","stsBase","tenant","policyKey","stsServer","clientID","b2cScopes","redirectUrl","postLogoutRedirectUrl","forgotPasswordUrl","OIDC_STORAGE_KEY_PREFIX","OidcStorageService","read","getKey","write","CustomIconService","matIconRegistry","domSanitizer","registerIcons","iconName","addSvgIcon","bypassSecurityTrustResourceUrl","AppComponent","metaService","customIconService","iconRegistry","setDefaultFontSetClass","events","fesm2020_router","previousEvent","_event","route_state_action","urlAfterRedirects","onClick","boards_actions","onResize","window_resize_actions","addTag","LoginRouteGuard","authService","location","canActivate","_state","currentUrl","href","isAuthenticationInProgress","checkAuth","getAuthenticationResult","loginUrlTree","parseUrl","returnUrl","hash","routes","loadChildren","Promise","LoginModule","AcceptTokenModule","loadComponent","RescheduleWidgetComponent","DoneWidgetComponent","CommentWidgetComponent","AcceptWidgetComponent","RejectWidgetComponent","ApproveWidgetComponent","DenyWidgetComponent","MainApplicationModule","redirectTo","AppRoutingModule","relativeLinkResolution","AppModule","bootstrap","angular_auth_oidc_client","authority","clientId","autoUserInfo","scope","postLogoutRedirectUri","silentRenew","useRefreshToken","forbiddenRoute","unauthorizedRoute","silentRenewUrl","renewTimeBeforeTokenExpiresInSeconds","logLevel","maxIdTokenIatOffsetAllowedInSeconds","triggerAuthorizationResultEvent","ngrx_store_devtools","maxAge","logOnly","environment_config","shared_store_module","animations","platform_browser","shared_module","bootstrapModule","providers","useValue","catch","webpackContext","module"],"sourceRoot":"webpack:///","sources":["./src/app/modules/shared/constants/user-type-list.const .ts","./src/app/modules/shared/enums/pill-options.enum.ts","./src/app/components/abstract/component.abstract.ts","./src/app/components/abstract/custom-control.abstract.ts","./src/app/modules/main-application/administration/abstract/administration-abstract.ts","./src/app/modules/main-application/administration/functions/get-general-roles-radio-list.function.ts","./src/app/modules/main-application/administration/actions/administration.actions.ts","./src/app/modules/main-application/administration/constants/vendor-role-name.constant.ts","./src/app/modules/main-application/administration/reducers/administration.reducer.ts","./src/app/modules/main-application/administration/selectors/administration.selectors.ts","./src/app/modules/main-application/boards/abstract/board-abstract.component.ts","./src/app/modules/main-application/boards/drag-n-drop-cursor.directive.ts","./src/app/modules/main-application/boards/interfaces/board.enums.ts","./src/app/modules/main-application/boards/interfaces/board.ts","./src/app/modules/main-application/boards/interfaces/custom-inspection.ts","./src/app/modules/main-application/boards/services/custom-inpection.service.ts","./src/app/modules/main-application/boards/store/boards.actions.ts","./src/app/modules/main-application/companies/config/enums/company-form.ts","./src/app/modules/main-application/companies/abstract/companies-abstract.ts","./src/app/modules/main-application/companies/actions/companies.actions.ts","./src/app/modules/main-application/companies/components/add-new-company-modal/add-new-company-modal.component.ts","./src/app/modules/main-application/companies/components/add-new-company-modal/add-new-company-modal.component.html","./src/app/modules/main-application/companies/reducers/companies.reducer.ts","./src/app/modules/main-application/companies/selectors/companies.selectors.ts","./src/app/modules/main-application/dashboards/actions/dashboard-filter.actions.ts","./src/app/modules/main-application/dashboards/actions/dashboard.actions.ts","./src/app/modules/main-application/dashboards/actions/kpi.actions.ts","./src/app/modules/main-application/dashboards/components/abstract/dashboards.abstract.ts","./src/app/services/timer.service.ts","./src/app/modules/main-application/dashboards/effects/dashboard.effects.ts","./src/app/modules/main-application/dashboards/models/chart-types.enum.ts","./src/app/modules/main-application/dashboards/models/portfolio-kpi.ts","./src/app/modules/main-application/dashboards/reducers/dashboard-filter.reducer.ts","./src/app/modules/main-application/dashboards/reducers/dashboards.reducer.ts","./src/app/modules/main-application/dashboards/reducers/kpi.reducer.ts","./src/app/modules/main-application/dashboards/selectors/dashboards.selectors.ts","./src/app/modules/main-application/dashboards/effects/kpi.effects.ts","./src/app/modules/shared/enums/user-roles.ts","./src/app/modules/main-application/administration/components/delete-role-summary-dialog/delete-role-summary-dialog.component.html","./src/app/modules/main-application/administration/components/delete-role-summary-dialog/delete-role-summary-dialog.component.ts","./src/app/modules/main-application/administration/functions/combineUsersWithRoles.ts","./src/app/modules/main-application/administration/effects/administration.effects.ts","./src/app/modules/main-application/management/components/system-configuration/store/system-configuration.effects.ts","./src/app/services/bids.service.ts","./src/app/modules/main-application/turnovers/effects/bulk-bids.effects.ts","./src/app/services/punch.service.ts","./src/app/modules/main-application/turnovers/effects/punch.effects.ts","./src/app/services/turnover-bids.service.ts","./src/app/modules/main-application/turnovers/effects/turnover-bids.effects.ts","./src/app/modules/shared/functions/update-workflow-step-responsible-party-model.function.ts","./src/app/services/appliances.service.ts","./src/app/modules/main-application/turnovers/effects/turnovers.effects.ts","./src/app/modules/main-application/turnovers/reducers/bulk-bids.reducer.ts","./src/app/modules/main-application/dashboards/shared-store.module.ts","./src/app/modules/main-application/dashboards/store/index.ts","./src/app/modules/main-application/inspections/models/rest-inspections-model.interface.ts","./src/app/modules/main-application/management/components/system-configuration/components/date-time-configuration/timezone.service.ts","./src/app/modules/main-application/management/components/system-configuration/components/timezone-entity-common.helper.ts","./src/app/modules/main-application/management/components/system-configuration/components/timezone-entity.helper.ts","./src/app/modules/main-application/management/components/system-configuration/components/timezone.helper.ts","./src/app/modules/main-application/management/components/system-configuration/store/system-configuration.actions.ts","./src/app/modules/main-application/management/components/system-configuration/store/system-configuration.reducer.ts","./src/app/modules/main-application/management/components/turnover-configuration/actions/turnover-configuration.actions.ts","./src/app/modules/main-application/management/components/turnover-configuration/components/turnover-configuration-step-assignees/services/turnover-configuration-step-assignees.service.ts","./src/app/modules/main-application/management/components/turnover-configuration/reducers/index.ts","./src/app/modules/main-application/management/components/turnover-configuration/selectors/turnover-configuration.selectors.ts","./src/app/modules/main-application/management/components/turnover-configuration/effects/turnover-configuration.effects.ts","./src/app/modules/main-application/management/components/turnover-configuration/store/turnover-configuration-store.module.ts","./src/app/modules/main-application/portfolio/actions/portfolio.actions.ts","./src/app/modules/main-application/portfolio/reducers/portfolio.reducer.ts","./src/app/modules/main-application/portfolio/selectors/portfolio.selectors.ts","./src/app/modules/main-application/portfolio/effects/portfolio.effects.ts","./src/app/modules/main-application/portfolio/store/portfolio-store.module.ts","./src/app/modules/main-application/space-template/store/space-template.actions.ts","./src/app/modules/main-application/space-template/store/space-template.reducer.ts","./src/app/modules/main-application/space-template/store/space-template.selectors.ts","./src/app/modules/main-application/survey-creator/actions/surveys.actions.ts","./src/app/modules/main-application/survey-creator/effects/surveys.effects.ts","./src/app/modules/main-application/survey-creator/reducers/surveys.reducer.ts","./src/app/modules/main-application/template/models/template-views.ts","./src/app/modules/main-application/template/store/template.effects.ts","./src/app/modules/main-application/template/store/template-store.module.ts","./src/app/modules/main-application/template/store/template.actions.ts","./src/app/modules/main-application/template/store/template.reducer.ts","./src/app/modules/main-application/turnovers/actions/bulk-and-scope.actions.ts","./src/app/modules/main-application/turnovers/actions/punch.actions.ts","./src/app/modules/main-application/turnovers/actions/turnover-bids.actions.ts","./src/app/modules/main-application/turnovers/actions/turnovers.actions.ts","./src/app/modules/main-application/turnovers/config/enums/turnover-form.ts","./src/app/modules/main-application/turnovers/interfaces/vacancy-loss-attr.ts","./src/app/modules/main-application/turnovers/interfaces/vacancy-loss-threshold.ts","./src/app/modules/main-application/turnovers/reducers/punch.reducer.ts","./src/app/modules/main-application/turnovers/reducers/turnover-bids.reducer.ts","./src/app/modules/main-application/turnovers/reducers/turnovers.reducer.ts","./src/app/modules/main-application/turnovers/selectors/punch.selectors.ts","./src/app/modules/main-application/turnovers/selectors/turnover-bids.selectors.ts","./src/app/modules/main-application/turnovers/selectors/turnovers.selectors.ts","./src/app/modules/shared/actions/enumerations.actions.ts","./src/app/modules/shared/actions/file-upload.actions.ts","./src/app/modules/shared/actions/route-state.action.ts","./src/app/modules/shared/actions/user.actions.ts","./src/app/modules/shared/actions/window-resize.actions.ts","./src/app/modules/shared/constants/app-routes.const.ts","./src/app/modules/shared/constants/none-radio-option.const.ts","./src/app/modules/shared/constants/priority-type-list.const.ts","./src/app/modules/shared/constants/workflow-step-list.const.ts","./src/app/modules/shared/directives/content-editable.directive.ts","./src/app/modules/ui-components/components/custom-tooltip/custom-tooltip.component.html","./src/app/modules/ui-components/components/custom-tooltip/custom-tooltip.component.ts","./src/app/modules/shared/directives/custom-tooltip.directive.ts","./src/app/modules/shared/directives/drop-zone.directive.ts","./src/app/modules/shared/enums/animation.ts","./src/app/modules/shared/enums/attachment-component-type.enum.ts","./src/app/modules/shared/enums/attachment-type.ts","./src/app/modules/shared/enums/auditable-entity-type.ts","./src/app/modules/shared/enums/breadcrumb-theme.enum.ts","./src/app/modules/shared/enums/button-type.ts","./src/app/modules/shared/enums/color-palette.enum.ts","./src/app/modules/shared/enums/compare-operator.enum.ts","./src/app/modules/shared/enums/dashboard-mode.ts","./src/app/modules/shared/enums/dashboard-view-type.ts","./src/app/modules/shared/enums/delinquency-result-type.ts","./src/app/modules/shared/enums/dropdown-tab.enum.ts","./src/app/modules/shared/enums/enumeration-item-fields.ts","./src/app/modules/shared/enums/field-type.ts","./src/app/modules/shared/enums/icon.enum.ts","./src/app/modules/shared/enums/kpi-type.ts","./src/app/modules/shared/enums/kpi-window-type.ts","./src/app/modules/shared/enums/loader-type.ts","./src/app/modules/shared/enums/local-storage-data.enum.ts","./src/app/modules/shared/enums/main-page-actions.ts","./src/app/modules/shared/enums/management-route.enum.ts","./src/app/modules/shared/enums/notification-category.ts","./src/app/modules/shared/enums/permission-level.enum.ts","./src/app/modules/shared/enums/priority-type.ts","./src/app/modules/shared/enums/route-data.ts","./src/app/modules/shared/enums/route-path.enum.ts","./src/app/modules/shared/enums/selection-date-mode.enum.ts","./src/app/modules/shared/enums/selection-range-mode.enum.ts","./src/app/modules/shared/enums/ticket-status-type.ts","./src/app/modules/shared/enums/ticket-type.ts","./src/app/modules/shared/enums/turnover-audit-mode.ts","./src/app/modules/shared/enums/update-status.ts","./src/app/modules/shared/enums/user-type.ts","./src/app/modules/shared/enums/workflow-phase-type.ts","./src/app/modules/shared/enums/workflow-step.enum.ts","./src/app/modules/shared/functions/check-permission-level.function.ts","./src/app/modules/shared/functions/get-bid-categories-radio-list.function.ts","./src/app/modules/shared/functions/get-company-radio-list.function.ts","./src/app/modules/shared/functions/get-date-object.function.ts","./src/app/modules/shared/functions/get-enumeration-radio-list.function.ts","./src/app/modules/shared/functions/get-portfolio-properties.function.ts","./src/app/modules/shared/functions/get-user-list.function.ts","./src/app/modules/shared/functions/get-utc.function.ts","./src/app/modules/shared/functions/parse-number.ts","./src/app/modules/shared/interfaces/turnover.interface.ts","./src/app/modules/shared/pipes/enumeration-value.pipe.ts","./src/app/modules/shared/pipes/escape-html.pipe.ts","./src/app/modules/shared/pipes/file-size.pipe.ts","./src/app/modules/shared/pipes/is-user-existing.pipe.ts","./src/app/modules/shared/pipes/number-validation.pipe.ts","./src/app/modules/shared/pipes/trust-html.pipe.ts","./src/app/modules/shared/pipes/turnover-attachment.pipe.ts","./src/app/modules/shared/reducers/file-upload.reducer.ts","./src/app/modules/shared/reducers/hydration-meta.reducer.ts","./src/app/modules/shared/reducers/enumeration.reducer.ts","./src/app/modules/shared/reducers/user.reducer.ts","./src/app/modules/shared/reducers/index.ts","./src/app/modules/shared/reducers/route.reducer.ts","./src/app/modules/shared/reducers/window-resize.reducer.ts","./src/app/modules/shared/selectors/core.selector.ts","./src/app/modules/shared/selectors/enumeration.selectors.ts","./src/app/modules/shared/selectors/user.selectors.ts","./src/app/modules/shared/services/auth.service.ts","./src/app/modules/shared/services/help-router.service.ts","./src/app/modules/shared/effects/window-resize.effects.ts","./src/app/modules/shared/effects/enumeration.effects.ts","./src/app/modules/shared/effects/file-upload.effects.ts","./src/app/services/tenant.service.ts","./src/app/modules/shared/effects/user.effects.ts","./src/app/modules/shared/interceptors/token.interceptor.ts","./src/app/modules/shared/shared.module.ts","./src/app/modules/ui-components/components/attachment-item/attachment-item.component.html","./src/app/modules/ui-components/components/attachment-item/attachment-item.component.ts","./src/app/modules/shared/functions/copy-to-clipboard.function.ts","./src/app/modules/ui-components/components/input-file/input-file.component.html","./src/app/modules/ui-components/components/input-file/input-file.component.ts","./src/app/modules/shared/functions/check-supported-format.function.ts","./src/app/modules/ui-components/components/attachment/attachment.component.html","./src/app/modules/ui-components/components/attachment/attachment.component.ts","./src/app/modules/ui-components/components/attachments-list/attachments-list.component.html","./src/app/modules/ui-components/components/attachments-list/attachments-list.component.ts","./src/app/modules/ui-components/components/button/button.component.html","./src/app/modules/ui-components/components/button/button.component.ts","./src/app/modules/ui-components/components/calendar-header/calendar-header.component.ts","./src/app/modules/ui-components/components/calendar-header/calendar-header.component.html","./src/app/modules/ui-components/components/mentions/caret-coords.ts","./src/app/modules/ui-components/components/mentions/mention-utils.ts","./src/app/modules/ui-components/components/mentions/mention-list.component.ts","./src/app/modules/ui-components/components/mentions/mention.directive.ts","./src/app/modules/ui-components/components/content-editable-area/content-editable-area.component.html","./src/app/modules/ui-components/components/content-editable-area/content-editable-area.component.ts","./src/app/modules/ui-components/components/customized-snackbar/snackbar-message.enum.ts","./src/app/modules/ui-components/components/customized-snackbar/component/customized-snackbar.component.ts","./src/app/modules/ui-components/components/customized-snackbar/component/customized-snackbar.component.html","./src/app/modules/ui-components/components/customized-snackbar/snackbar.service.ts","./src/app/modules/ui-components/components/date-dropdown/date-dropdown.component.html","./src/app/modules/ui-components/components/date-dropdown/date-dropdown.component.ts","./src/app/modules/ui-components/components/divider/divider.component.html","./src/app/modules/ui-components/components/divider/divider.component.ts","./src/app/modules/ui-components/components/icon/services/icon.service.ts","./src/app/modules/ui-components/components/icon/icon.component.html","./src/app/modules/ui-components/components/icon/icon.component.ts","./src/app/modules/ui-components/directives/autoresize/autoresize.directive.ts","./src/app/modules/ui-components/components/input-area/input-area.component.html","./src/app/modules/ui-components/components/input-area/input-area.component.ts","./src/app/modules/ui-components/components/input-error/input-error.component.html","./src/app/modules/ui-components/components/input-error/input-error.component.ts","./src/app/modules/ui-components/components/input-error/services/input-error.service.ts","./src/app/modules/ui-components/components/input/input.component.html","./src/app/modules/ui-components/components/input/input.component.ts","./src/app/modules/ui-components/components/radio-button-dropdown/radio-button-dropdown.component.html","./src/app/modules/ui-components/components/radio-button-dropdown/radio-button-dropdown.component.ts","./src/app/modules/ui-components/components/radio-button/radio-button.component.html","./src/app/modules/ui-components/components/radio-button/radio-button.component.ts","./src/app/modules/shared/functions/get-active-validation-error.function.ts","./src/app/modules/ui-components/components/read-only-field/read-only-field.component.html","./src/app/modules/ui-components/components/read-only-field/read-only-field.component.ts","./src/app/modules/ui-components/components/skeleton-loader/services/skeleton-loader.service.ts","./src/app/modules/shared/selectors/window-resize.selectors.ts","./src/app/modules/ui-components/components/skeleton-loader/skeleton-loader.component.html","./src/app/modules/ui-components/components/skeleton-loader/skeleton-loader.component.ts","./src/app/modules/ui-components/components/slide-toggle/slide-toggle.component.ts","./src/app/modules/ui-components/components/slide-toggle/slide-toggle.component.html","./src/app/modules/ui-components/components/table-empty-content/table-empty-content.component.ts","./src/app/modules/ui-components/components/table-empty-content/table-empty-content.component.html","./src/app/modules/ui-components/components/user-select-dropdown/user-select-dropdown.component.html","./src/app/modules/ui-components/components/user-select-dropdown/user-select-dropdown.component.ts","./src/app/modules/ui-components/modals/config/default-modal-config.constant.ts","./src/app/modules/ui-components/modals/config/dialog-result.enum.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-save-template-dialog/custom-inspection-save-template-dialog.component.html","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-save-template-dialog/custom-inspection-save-template-dialog.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-header/custom-inspection-header.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-header/custom-inspection-header.component.html","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-item/custom-inspection-item.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-item/custom-inspection-item.component.html","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-dialog.component.html","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-dialog.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-amount-dialog/schedule-amount-dialog.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-amount-dialog/schedule-amount-dialog.component.html","./src/app/modules/shared/functions/get-employee-radio-list.function.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-cell-dialog/schedule-cell-dialog.component.html","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-cell-dialog/schedule-cell-dialog.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-done-dialog/schedule-done-dialog.component.ts","./src/app/modules/main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-done-dialog/schedule-done-dialog.component.html","./src/app/modules/ui-components/modals/add-bid-modal/add-bid-modal.component.html","./src/app/modules/ui-components/modals/add-bid-modal/add-bid-modal.component.ts","./src/app/modules/main-application/administration/users/config/enums/user-preview.ts","./src/app/modules/main-application/administration/functions/combineUserWithProperties.ts","./src/app/modules/main-application/administration/functions/propertyStructureToTree.ts","./src/app/modules/shared/validators/user-exists.validator.ts","./src/app/modules/shared/validators/user-inactive.validator.ts","./src/app/modules/shared/enums/property-type.enum.ts","./src/app/modules/ui-components/components/select-tree/functions/tree-utils.ts","./src/app/modules/ui-components/components/select-tree/select-tree.component.html","./src/app/modules/ui-components/components/select-tree/select-tree.component.ts","./src/app/modules/ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.component.html","./src/app/modules/ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.component.ts","./src/app/modules/ui-components/modals/gallery-modal/gallery-modal.component.html","./src/app/modules/ui-components/modals/gallery-modal/gallery-modal.component.ts","./src/app/modules/ui-components/modals/info-modal/info-modal.component.html","./src/app/modules/ui-components/modals/info-modal/info-modal.component.ts","./src/app/modules/ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.component.html","./src/app/modules/ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.component.ts","./src/app/modules/ui-components/modals/prompt-modal/prompt-modal.component.ts","./src/app/modules/ui-components/modals/prompt-modal/prompt-modal.component.html","./src/app/modules/shared/functions/ticket-attachment.utils.ts","./src/app/modules/shared/selectors/file-upload.selectors.ts","./src/app/modules/ui-components/modals/ticket-preview-modal/ticket-preview-modal.component.html","./src/app/modules/ui-components/modals/ticket-preview-modal/ticket-preview-modal.component.ts","./src/app/modules/ui-components/modals/user-preview-modal/user-preview-modal.component.html","./src/app/modules/ui-components/modals/user-preview-modal/user-preview-modal.component.ts","./src/app/modules/main-application/administration/functions/userToPropertyMappingHandlers.ts","./src/app/modules/ui-components/modals/add-vendor-modal/add-vendor-modal.component.ts","./src/app/modules/ui-components/modals/add-vendor-modal/add-vendor-modal.component.html","./src/app/modules/ui-components/modals/comment-too-long-modal/comment-too-long-modal.component.ts","./src/app/modules/ui-components/modals/comment-too-long-modal/comment-too-long-modal.component.html","./src/app/modules/ui-components/modals/confirmation-modal/confirmation-modal.component.html","./src/app/modules/ui-components/modals/confirmation-modal/confirmation-modal.component.ts","./src/app/modules/ui-components/modals/space-template-modal/space-template-modal.component.html","./src/app/modules/ui-components/modals/space-template-modal/space-template-modal.component.ts","./src/app/modules/shared/enums/turnover-punch-fields.enum.ts","./src/app/modules/ui-components/modals/turnover-punch-modal/turnover-punch-modal.component.html","./src/app/modules/ui-components/modals/turnover-punch-modal/turnover-punch-modal.component.ts","./src/app/modules/ui-components/modals/modals.service.ts","./src/app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.component.html","./src/app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.component.ts","./src/app/modules/shared/constants/email.regexp.const.ts","./src/app/modules/ui-components/validators/email.validator.ts","./src/app/services/admin-panel.service.ts","./src/app/services/app-version.service.ts","./src/app/services/cache.service.ts","./src/app/services/companies.service.ts","./src/app/services/file-uploads.service.ts","./src/app/services/kpi.service.ts","./src/app/services/properties.service.ts","./src/app/services/renewals.service.ts","./src/app/services/restapi.service.ts","./src/app/services/side-panel.service.ts","./src/app/services/surveys.service.ts","./src/app/services/system-config.service.ts","./src/app/services/tickets.service.ts","./src/app/services/turnover-config.service.ts","./src/app/services/turnovers.service.ts","./src/app/services/unit-non-pms.service.ts","./src/app/services/units.service.ts","./src/app/services/user.service.ts","./src/app/services/workflow-actions.service.ts","./src/app/services/workflow-step-comments.service.ts","./src/environments/environment-config.ts","./src/environments/environment.dev.ts","./src/app/services/oidc-storage.service.ts","./src/app/services/custom-icon.service.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/modules/shared/guards/login-route.guard.ts","./src/app/app.routing.module.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import { UserType } from '@shared/enums/user-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const UserTypeListConst: IRadioButtonOption[] = [\n {\n value: UserType.Employee,\n label: 'Employee',\n },\n {\n value: UserType.Contractor,\n label: 'Vendor',\n },\n];\n","export enum PillOptions {\n Below30Days = '< 30 days',\n Between30To60Days = '30-60 days',\n Between60To180Days = '61-180 days',\n Over25 = '>0.25',\n Over50 = '>0.5',\n}\n","import { ChangeDetectorRef, Directive, Input } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nimport { IDateSelectConfig } from '@app/modules/ui-components/components/date-range-dropdown/config/interfaces/date-select-config.interface';\nimport { ChartTypes } from '@dashboards/models/chart-types.enum';\nimport { TurnoverForm } from '@main-application/turnovers/config/enums/turnover-form';\nimport { NoValue } from '@shared/constants/none-radio-option.const';\nimport { PriorityTypeListConst } from '@shared/constants/priority-type-list.const';\nimport { UserTypeListConst } from '@shared/constants/user-type-list.const ';\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { Animation } from '@shared/enums/animation';\nimport { AttachmentComponentType } from '@shared/enums/attachment-component-type.enum';\nimport { AuditableEntityType } from '@shared/enums/auditable-entity-type';\nimport { BreadcrumbTheme } from '@shared/enums/breadcrumb-theme.enum';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { CompareOperator } from '@shared/enums/compare-operator.enum';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { DelinquencyResultType } from '@shared/enums/delinquency-result-type';\nimport { EDropdownTab } from '@shared/enums/dropdown-tab.enum';\nimport { FieldType } from '@shared/enums/field-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { LoaderType } from '@shared/enums/loader-type';\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { NotificationCategory } from '@shared/enums/notification-category';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { PillOptions } from '@shared/enums/pill-options.enum';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { ESelectionDateMode } from '@shared/enums/selection-date-mode.enum';\nimport { ESelectionRangeMode } from '@shared/enums/selection-range-mode.enum';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TurnoverAuditMode } from '@shared/enums/turnover-audit-mode';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UserType } from '@shared/enums/user-type';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\n\n@Directive()\nexport abstract class ComponentAbstract {\n /*\n * For now there's no way to subscribe to FormControl.touched changes\n * so it needs to be passed as param to trigger view update (due to ChangeDetectionStrategy.OnPush)\n * hopefully this field could be removed with v14 - https://github.com/angular/angular/issues/10887\n */\n @Input() showValidationError = false;\n @Input() displayErrorContent = true;\n\n readonly tabConfig: IDateSelectConfig[] = [\n {\n index: this.EDropdownTab.PREDEFINED,\n label: 'Predefined',\n },\n {\n index: this.EDropdownTab.OWN,\n label: 'Own settings',\n },\n ];\n readonly workflowStepList: IRadioButtonOption[] = WorkflowStepListConst;\n readonly priorityTypeList: IRadioButtonOption[] = PriorityTypeListConst;\n readonly userTypeList: IRadioButtonOption[] = UserTypeListConst;\n readonly NoValue = NoValue;\n\n @Input() isExpanded = false;\n isActive = false;\n invalid = false;\n isDisabled = false;\n errors: ValidationErrors;\n\n currentTab: EDropdownTab = EDropdownTab.PREDEFINED;\n\n userData: UserData;\n userData$: Observable;\n isAuthenticated = false;\n isAuthenticated$: Observable;\n dashboardViewType$: Observable;\n currentDashboardViewType$: Observable;\n dashboardViewType: DashboardViewType;\n isLoading$: Observable;\n\n isEmptyValue = false;\n\n protected constructor(protected cdr: ChangeDetectorRef) {}\n\n get EIcon(): typeof EIcon {\n return EIcon;\n }\n\n get EColorPalette(): typeof EColorPalette {\n return EColorPalette;\n }\n\n get EDropdownTab(): typeof EDropdownTab {\n return EDropdownTab;\n }\n\n get ESelectionDateMode(): typeof ESelectionDateMode {\n return ESelectionDateMode;\n }\n\n get ESelectionRangeMode(): typeof ESelectionRangeMode {\n return ESelectionRangeMode;\n }\n\n get RoutePath(): typeof RoutePath {\n return RoutePath;\n }\n\n get WorkflowPhaseType(): typeof WorkflowPhaseType {\n return WorkflowPhaseType;\n }\n\n get MainPageActions(): typeof MainPageActions {\n return MainPageActions;\n }\n\n get BreadcrumbTheme(): typeof BreadcrumbTheme {\n return BreadcrumbTheme;\n }\n\n get PermissionLevelType(): typeof PermissionLevelType {\n return PermissionLevelType;\n }\n\n get WorkflowStep(): typeof WorkflowStepEnumType {\n return WorkflowStepEnumType;\n }\n\n get AttachmentType(): typeof AttachmentComponentType {\n return AttachmentComponentType;\n }\n\n get PillOptions(): typeof PillOptions {\n return PillOptions;\n }\n\n get CompareOperator(): typeof CompareOperator {\n return CompareOperator;\n }\n\n get ChartTypes(): typeof ChartTypes {\n return ChartTypes;\n }\n\n get UserType(): typeof UserType {\n return UserType;\n }\n\n get AuditableEntityType(): typeof AuditableEntityType {\n return AuditableEntityType;\n }\n\n get FieldType(): typeof FieldType {\n return FieldType;\n }\n\n get UpdateStatus(): typeof UpdateStatus {\n return UpdateStatus;\n }\n\n get NotificationCategory(): typeof NotificationCategory {\n return NotificationCategory;\n }\n\n get DelinquencyResultType(): typeof DelinquencyResultType {\n return DelinquencyResultType;\n }\n\n get TurnoverForm(): typeof TurnoverForm {\n return TurnoverForm;\n }\n\n get TicketStatusType(): typeof TicketStatusType {\n return TicketStatusType;\n }\n\n get LoaderType(): typeof LoaderType {\n return LoaderType;\n }\n\n get Animation(): typeof Animation {\n return Animation;\n }\n\n get TurnoverAuditMode(): typeof TurnoverAuditMode {\n return TurnoverAuditMode;\n }\n\n get ButtonType(): typeof ButtonType {\n return ButtonType;\n }\n\n get LocalStorageDataEnum(): typeof LocalStorageDataEnum {\n return LocalStorageDataEnum;\n }\n\n get ManagementRoute(): typeof ManagementRoute {\n return ManagementRoute;\n }\n\n get WorkflowStepEnumType(): typeof WorkflowStepEnumType {\n return WorkflowStepEnumType;\n }\n\n toggleMenu(menuExpanded: boolean) {\n this.isExpanded = menuExpanded;\n this.cdr.detectChanges();\n }\n\n trackByFn(index: number, item?: any) {\n return item.id;\n }\n}\n","import { ChangeDetectorRef, Directive, Optional } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormControlStatus,\n FormGroupDirective,\n NgControl,\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nimport { ComponentAbstract } from './component.abstract';\n\n@Directive()\nexport abstract class CustomControlAbstract extends ComponentAbstract implements ControlValueAccessor {\n control = new FormControl(null);\n\n protected constructor(\n protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() private formDirective: FormGroupDirective\n ) {\n super(cdr);\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get showValidationErrorOrSubmitted() {\n return this.formDirective?.submitted || this.showValidationError;\n }\n\n abstract writeValue(obj: any): void;\n\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n protected onChanged: (value: any) => void = () => {};\n onTouched: () => void = () => {};\n\n protected checkStatus() {\n if (this.ngControl?.control) {\n this.invalid = this.ngControl.control.invalid;\n\n if (this.control != this.ngControl.control) {\n //Remove this part than all controls will be done normal way\n if (this.ngControl.control.touched) {\n this.control.markAsTouched();\n } else {\n this.control.markAsUntouched();\n }\n if (this.ngControl.control.pristine) {\n this.control.markAsPristine();\n } else {\n this.control.markAsDirty();\n }\n }\n }\n }\n\n protected listenControlTouched(control: AbstractControl): Observable {\n return new Observable(observer => {\n const originalMarkAsTouched = control.markAsTouched;\n const originalReset = control.reset;\n\n control.reset = (...args) => {\n observer.next(false);\n originalReset.call(control, ...args);\n };\n\n control.markAsTouched = (...args) => {\n observer.next(true);\n originalMarkAsTouched.call(control, ...args);\n };\n\n observer.next(control.touched);\n\n return () => {\n control.markAsTouched = originalMarkAsTouched;\n control.reset = originalReset;\n };\n });\n }\n\n protected checkControlStatus(status: FormControlStatus) {\n this.checkStatus();\n if (status === 'VALID' || status === 'DISABLED') {\n this.errors = null;\n this.cdr.markForCheck();\n } else if (status === 'INVALID') {\n this.errors = { ...this.ngControl?.control.errors };\n this.cdr.markForCheck();\n } else {\n this.errors = null;\n }\n }\n}\n","import { ChangeDetectorRef, Directive } from '@angular/core';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { setGeneralRoleRadioList } from '@main-application/administration/actions/administration.actions';\nimport {\n selectAllGeneralRoles,\n selectGeneralRoleRadioList,\n} from '@main-application/administration/selectors/administration.selectors';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nimport { getGeneralRoleRadioList } from '../functions/get-general-roles-radio-list.function';\n\n@Directive()\nexport abstract class AdministrationAbstract extends ComponentAbstract {\n isLoading = true;\n\n inProgress$: Observable;\n\n userRoles: IRadioButtonOption[] = [];\n\n userStates: IRadioButtonOption[] = [\n {\n value: true,\n label: 'Active',\n },\n {\n value: false,\n label: 'Inactive',\n },\n ];\n\n protected constructor(protected cdr: ChangeDetectorRef, protected store: Store<{}>) {\n super(cdr);\n }\n\n selectAllGeneralRoles(): Observable {\n return this.store.select(selectAllGeneralRoles).pipe(\n untilDestroyed(this),\n filter((generalRoles: GeneralRole[]) => !!generalRoles),\n tap((generalRoles: GeneralRole[]) => {\n this.store.dispatch(setGeneralRoleRadioList({ generalRoleRadioList: getGeneralRoleRadioList(generalRoles) }));\n })\n );\n }\n\n selectGeneralRoleRadioList(): Observable[]> {\n return this.store.select(selectGeneralRoleRadioList).pipe(\n untilDestroyed(this),\n filter((generalRoleRadioList: IRadioButtonOption[]) => !!generalRoleRadioList),\n tap((generalRoleRadioList: IRadioButtonOption[]) => {\n this.userRoles = generalRoleRadioList;\n this.cdr.detectChanges();\n })\n );\n }\n}\n","import { GeneralRole } from '@shared/interfaces/general-role';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getGeneralRoleRadioList(generalRoles: GeneralRole[]): IRadioButtonOption[] {\n return generalRoles.map(item => {\n return {\n value: item.id,\n label: item.roleName,\n };\n });\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { GeneralRoleModel } from '@shared/enums/general-role-model';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { GeneralRoleToPermissionLevel } from '@shared/interfaces/general-role-to-permission-level';\nimport { PermissionLevel } from '@shared/interfaces/permission-level';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserToGeneralRoleMapping } from '@shared/interfaces/user-to-general-role-mapping';\nimport { UserToGeneralRoleModel } from '@shared/interfaces/user-to-general-role-model';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { InviteRestUserModel, RestUserModel, UpdateRestUserModel } from '@shared/interfaces/user.interface';\n\nexport const loadAllUsers = createAction('[Administration] Load all users');\n\nexport const loadAllUsersSucceeded = createAction(\n '[Administration] Load all users succeeded',\n props<{ activeUsers: RestUserModel[]; inactiveUsers: RestUserModel[] }>()\n);\n\nexport const loadAllUsersFailed = createAction(\n '[Administration] Load all users failed',\n props<{ users: RestUserModel[] }>()\n);\n\nexport const loadPropertyUsers = createAction('[Administration] Load property users', props<{ propertyId: number }>());\n\nexport const loadPropertyUsersSucceeded = createAction(\n '[Administration] Load property users succeeded',\n props<{ activePropertyUsers: RestUserModel[]; inactivePropertyUsers: RestUserModel[] }>()\n);\nexport const loadPropertyUsersFailed = createAction('[Administration] Load property users failed');\n\nexport const clearAllUsers = createAction('[Administration] Clear all users');\n\nexport const loadAllPropertyRoles = createAction('[Administration] Load all properties roles');\n\nexport const clearAllPropertiesRoles = createAction('[Administration] Clear all properties roles');\n\nexport const loadAllPropertiesRolesSucceeded = createAction(\n '[Administration] Load all properties roles succeeded',\n props<{ result: any }>()\n);\n\nexport const loadAllUserToPropertyMappings = createAction('[Administration] Load all user to property mappings');\n\nexport const clearAllUserToPropertyMappings = createAction('[Administration] Clear all user to property mappings');\n\nexport const loadAllUserToProperyMappingsSucceeded = createAction(\n '[Administration] Load all user to property mappings succeeded',\n props<{ userToPropertyMapping: UserToPropertyMapping[] }>()\n);\n\nexport const loadAllPermissionLevels = createAction('[Administration] Load all permission levels');\n\nexport const loadAllPermissionLevelsSucceeded = createAction(\n '[Administration] Load all permission levels succeeded',\n props<{ result: PermissionLevel[] }>()\n);\n\nexport const loadAllGeneralRolesToPermissionMapping = createAction(\n '[Administration] Load all general roles to permission mapping'\n);\n\nexport const loadAllGeneralRolesToPermissionMappingSucceeded = createAction(\n '[Administration] Load all general roles to permission mapping succeeded',\n props<{ result: GeneralRoleToPermissionLevel[] }>()\n);\n\nexport const loadUserToRoleMapping = createAction('[Administration] Load user to role mapping');\n\nexport const loadUserToRoleMappingSucceeded = createAction(\n '[Administration] Load user to general role mapping succeeded',\n props<{ userToGeneralRole: UserToGeneralRoleMapping[] }>()\n);\n\nexport const clearUserToRoleMapping = createAction('[Administration] Clear user to role mapping');\n\nexport const setSelectedUsers = createAction(\n '[Administration] Set selected users',\n props<{ users: UserWithGeneralRole[] }>()\n);\n\nexport const loadAllGeneralRoles = createAction('[Administration] Load all general roles');\n\nexport const loadAllGeneralRolesSucceeded = createAction(\n '[Administration] Load all general roles succeeded',\n props<{ generalRoles: GeneralRole[] }>()\n);\n\nexport const clearAllGeneralRoles = createAction('[Administration] Clear all general roles');\n\nexport const setAllUsersCombinedWithGeneralRoles = createAction(\n '[Administration] Set all users combined with general roles',\n props<{ usersWithGeneralRoles: UserWithGeneralRole[] }>()\n);\n\nexport const loadPropertiesStructure = createAction('[Administration] Load properties structure');\n\nexport const clearPropertiesStructure = createAction('[Administration] Clear all properties structure');\n\nexport const loadPropertiesStructureSucceeded = createAction(\n '[Administration] Load properties structure succeeded',\n props<{ propertiesStructure: PropertyBasicInfo[] }>()\n);\n\nexport const startAddNewUser = createAction('[Administration] Start adding new user', props<{ user: RestUserModel }>());\n\nexport const addingNewUserSucceeded = createAction(\n '[Administration] Adding new user succeeded',\n props<{ user: RestUserModel }>()\n);\n\nexport const addingNewUserFailed = createAction('[Administration] Adding new user failed');\n\nexport const clearAddedUser = createAction('[Administration] clear Added User');\n\n/**\n * assign user into property\n */\nexport const assignUserToProperty = createAction(\n '[Administration] assign User to Property',\n props<{ userToPropertyRoleList: UserToPropertyMapping[] }>()\n);\nexport const assignUserToPropertySuccess = createAction('[Administration] assign User to Property Success');\nexport const assignUserToPropertyError = createAction('[Administration] assign User to Property Error');\n\n/**\n * removing property assigned user\n */\nexport const removingPropertyAssignedUser = createAction(\n '[Administration] removing property assigned user',\n props<{ deleteUserToPropertyMappings: number[] }>()\n);\nexport const removingPropertyAssignedUserSuccess = createAction(\n '[Administration] removing property assigned user success'\n);\nexport const removingPropertyAssignedUserError = createAction('[Administration] removing property assigned user error');\n\nexport const requestFailure = createAction('[Administration] Request failure', props());\n\nexport const saveUsersRolesAndUnits = createAction(\n '[Administration] Start saving users roles and units',\n props<{ userToGeneralRole: UserToGeneralRoleModel[]; userToPropertyRole: UserToPropertyMapping[] }>()\n);\n\nexport const saveUsersRolesAndUnitsSucceeded = createAction('[Administration] Saving users roles and units succeeded');\n\nexport const selectGeneralRoleToEdit = createAction(\n '[Administration] Select general role to edit',\n props<{ generalRole: GeneralRole }>()\n);\n\nexport const startDeleteGeneralRole = createAction('[Administration] Start delete general role', props());\n\nexport const deleteGeneralRoleSucceeded = createAction(\n '[Administration] Delete general role succeded',\n props()\n);\n\nexport const deleteGeneralRoleFailed = createAction('[Administration] Delete general role failed', props());\n\nexport const clearSelectedGeneralRole = createAction('[Administration] Clear selected general role');\n\nexport const startSavingGeneralRole = createAction(\n '[Administration] Start saving general role',\n props<{ generalRole: GeneralRoleModel }>()\n);\n\nexport const savingGeneralRoleSucceeded = createAction('[Administration] Saving general role succeded');\n\nexport const savingGeneralRoleFailed = createAction('[Administration] Saving general role failed');\n\nexport const startUpdatingGeneralRole = createAction(\n '[Administration] Start updating general role',\n props<{ generalRole: GeneralRoleModel }>()\n);\n\nexport const updatingGeneralRoleSucceeded = createAction('[Administration] Updating general role succeded');\n\nexport const updatingGeneralRoleFailed = createAction('[Administration] Updating general role failed');\n\nexport const setGeneralRoleRadioList = createAction(\n '[Administration] set General Role Radio List',\n props<{ generalRoleRadioList: IRadioButtonOption[] }>()\n);\n\n/**\n * invite new user\n */\nexport const inviteNewUser = createAction(\n '[Administration] invite new user',\n props<{\n user: InviteRestUserModel;\n roleId: number;\n selectedProperty: number[];\n }>()\n);\nexport const inviteNewUserSuccess = createAction(\n '[Administration] invite new user success',\n props<{ user: RestUserModel }>()\n);\nexport const inviteNewUserError = createAction('[Administration] invite new user error');\n\n/**\n * Update user data\n */\nexport const updateUserData = createAction(\n '[Administration] update User Data',\n props<{\n user: UpdateRestUserModel;\n roleId: number;\n userToPropertyRoleList: UserToPropertyMapping[];\n deleteUserToPropertyMappings: number[];\n }>()\n);\nexport const updateUserDataSuccess = createAction('[Administration] update User Data success');\nexport const updateUserDataError = createAction('[Administration] update User Data error');\n\n/**\n * save User To General Role\n */\nexport const saveUserToGeneralRole = createAction(\n '[Administration] save User To General Role',\n props<{ usersToGeneralRoleList: UserToGeneralRoleModel[] }>()\n);\nexport const saveUserToGeneralRoleSuccess = createAction('[Administration] save User To General Role success');\nexport const saveUserToGeneralRoleError = createAction('[Administration] save User To General Role error');\n\nexport const clearUserPreviewData = createAction('[Administration] clear User Preview Data');\n\nexport const removeUser = createAction('[Administration] remove user', props<{ user: UserWithGeneralRole }>());\nexport const reactivateUser = createAction('[Administration] reactivate user', props<{ user: UserWithGeneralRole }>());\nexport const removeUserSucceeded = createAction('[Administration] remove user succeeded');\nexport const reactivateUserSucceeded = createAction('[Administration] reactivate user succeeded');\nexport const removeUserFailed = createAction('[Administration] remove user failed');\n","export const VENDOR_ROLE_NAME = 'Vendor';\n","import { createReducer, on } from '@ngrx/store';\n\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { getUserOrVendorList } from '@shared/functions/get-user-list.function';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { GeneralRoleToPermissionLevel } from '@shared/interfaces/general-role-to-permission-level';\nimport { PermissionLevel } from '@shared/interfaces/permission-level';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserToGeneralRoleMapping } from '@shared/interfaces/user-to-general-role-mapping';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nimport * as AdministrationActions from '../actions/administration.actions';\n\nexport const administrationFeatureKey = 'administration';\n\nexport interface State {\n activeUsers: RestUserModel[];\n activeUserOrVendorOptionsList: IRadioButtonOption[];\n inactiveUsers: RestUserModel[];\n usersLoading: boolean;\n activePropertyUsers: RestUserModel[];\n propertyUsersLoading: boolean;\n permissionLevels: PermissionLevel[];\n generalRolesToPermissionMapping: GeneralRoleToPermissionLevel[];\n propertiesRoles: any;\n userToGeneralRole: UserToGeneralRoleMapping[];\n selectedUsers: UserWithGeneralRole[];\n generalRoles: GeneralRole[];\n usersWithGeneralRoles: UserWithGeneralRole[];\n usersWithGeneralRolesLoading: boolean;\n propertiesStructure: PropertyBasicInfo[];\n\n addNewUserInProgress: boolean;\n addedUser: RestUserModel;\n deleteGeneralRoleInProgress: boolean;\n selectedGeneralRole: GeneralRole;\n saveGeneralRoleInProgress: boolean;\n userToPropertyMapping: UserToPropertyMapping[];\n generalRoleRadioList: IRadioButtonOption[];\n\n userUpdateInProgress: boolean;\n userUpdateStatus: UpdateStatus;\n\n userInviteInProgress: boolean;\n userInviteStatus: UpdateStatus;\n userInvited: RestUserModel | null;\n\n saveUserToGeneralRoleInProgress: boolean;\n saveUserToGeneralRoleStatus: UpdateStatus;\n\n assignUserIntoPropertyInProgress: boolean;\n assignUserIntoPropertyStatus: UpdateStatus;\n\n removingPropertyAssignedUserInProgress: boolean;\n removingPropertyAssignedUserStatus: UpdateStatus;\n removeUserInProgress: boolean;\n}\n\nexport const initialState: State = {\n addNewUserInProgress: false,\n addedUser: null,\n deleteGeneralRoleInProgress: false,\n generalRoles: [],\n generalRolesToPermissionMapping: [],\n permissionLevels: [],\n propertiesRoles: null,\n propertiesStructure: [],\n activePropertyUsers: [],\n propertyUsersLoading: false,\n saveGeneralRoleInProgress: false,\n\n selectedGeneralRole: null,\n selectedUsers: [],\n userToGeneralRole: [],\n userToPropertyMapping: [],\n activeUsers: [],\n activeUserOrVendorOptionsList: [],\n inactiveUsers: [],\n usersLoading: false,\n usersWithGeneralRoles: [],\n usersWithGeneralRolesLoading: false,\n\n generalRoleRadioList: [],\n\n userUpdateInProgress: false,\n userUpdateStatus: null,\n\n userInviteInProgress: false,\n userInviteStatus: null,\n userInvited: null,\n\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: null,\n\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: null,\n\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: null,\n removeUserInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n\n on(AdministrationActions.loadAllUsers, (state, action) => ({\n ...state,\n usersLoading: true,\n usersWithGeneralRolesLoading: true,\n })),\n on(AdministrationActions.loadAllUsersSucceeded, (state, action) => ({\n ...state,\n activeUsers: action.activeUsers,\n activeUserOrVendorOptionsList: getUserOrVendorList(action.activeUsers),\n inactiveUsers: action.inactiveUsers,\n usersLoading: false,\n })),\n on(AdministrationActions.loadAllUsersFailed, (state, action) => ({ ...state, users: [], usersLoading: false })),\n on(AdministrationActions.clearAllUsers, (state, action) => ({ ...state, users: null })),\n\n on(AdministrationActions.loadPropertyUsers, (state, action) => ({ ...state, propertyUsersLoading: true })),\n on(AdministrationActions.loadPropertyUsersSucceeded, (state, action) => ({\n ...state,\n activePropertyUsers: action.activePropertyUsers,\n propertyUsersLoading: false,\n })),\n on(AdministrationActions.loadPropertyUsersFailed, (state, action) => ({\n ...state,\n activePropertyUsers: [],\n propertyUsersLoading: false,\n })),\n\n on(AdministrationActions.loadAllPermissionLevelsSucceeded, (state, action) => ({\n ...state,\n permissionLevels: action.result,\n })),\n on(AdministrationActions.loadAllGeneralRolesToPermissionMappingSucceeded, (state, action) => ({\n ...state,\n generalRolesToPermissionMapping: action.result,\n })),\n on(AdministrationActions.loadAllPropertiesRolesSucceeded, (state, action) => ({\n ...state,\n propertiesRoles: action.result,\n })),\n on(AdministrationActions.clearAllPropertiesRoles, (state, action) => ({ ...state, propertiesRoles: undefined })),\n on(AdministrationActions.loadUserToRoleMappingSucceeded, (state, action) => ({\n ...state,\n userToGeneralRole: action.userToGeneralRole,\n })),\n on(AdministrationActions.setSelectedUsers, (state, action) => ({ ...state, selectedUsers: action.users })),\n on(AdministrationActions.loadAllGeneralRolesSucceeded, (state, action) => ({\n ...state,\n generalRoles: action.generalRoles,\n })),\n on(AdministrationActions.clearAllGeneralRoles, (state, action) => ({ ...state, generalRoles: undefined })),\n on(AdministrationActions.setAllUsersCombinedWithGeneralRoles, (state, action) => ({\n ...state,\n usersWithGeneralRoles: action.usersWithGeneralRoles,\n usersWithGeneralRolesLoading: false,\n })),\n on(AdministrationActions.clearPropertiesStructure, (state, action) => ({ ...state, propertiesStructure: undefined })),\n on(AdministrationActions.loadPropertiesStructureSucceeded, (state, action) => ({\n ...state,\n propertiesStructure: action.propertiesStructure,\n })),\n on(AdministrationActions.saveUsersRolesAndUnits, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: true,\n saveUserToPropertyInProgress: true,\n })),\n\n /**\n * assign user into property\n */\n on(AdministrationActions.assignUserToProperty, (state, action) => ({\n ...state,\n assignUserIntoPropertyInProgress: true,\n assignUserIntoPropertyStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(AdministrationActions.assignUserToPropertySuccess, (state, action) => ({\n ...state,\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: UpdateStatus.UPDATED,\n })),\n on(AdministrationActions.assignUserToPropertyError, (state, action) => ({\n ...state,\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * removing property assigned user\n */\n on(AdministrationActions.removingPropertyAssignedUser, (state, action) => ({\n ...state,\n removingPropertyAssignedUserInProgress: true,\n removingPropertyAssignedUserStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(\n AdministrationActions.removingPropertyAssignedUserSuccess,\n AdministrationActions.removingPropertyAssignedUserError,\n (state, action) => ({\n ...state,\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: UpdateStatus.DELETED,\n })\n ),\n on(\n AdministrationActions.removingPropertyAssignedUserSuccess,\n AdministrationActions.removingPropertyAssignedUserError,\n (state, action) => ({\n ...state,\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: UpdateStatus.ERROR,\n })\n ),\n\n /**\n * save User To General Role\n */\n on(AdministrationActions.saveUserToGeneralRole, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: true,\n saveUserToGeneralRoleStatus: UpdateStatus.IN_PROGRESS,\n })),\n\n on(AdministrationActions.saveUserToGeneralRoleSuccess, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: UpdateStatus.UPDATED,\n })),\n\n on(AdministrationActions.saveUserToGeneralRoleError, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: UpdateStatus.ERROR,\n })),\n\n on(AdministrationActions.clearUserToRoleMapping, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: undefined,\n })),\n\n on(\n AdministrationActions.assignUserToPropertySuccess,\n AdministrationActions.assignUserToPropertyError,\n (state, action) => ({ ...state, saveUserToPropertyInProgress: false })\n ),\n on(AdministrationActions.startAddNewUser, (state, action) => ({\n ...state,\n addNewUserInProgress: true,\n addedUser: null,\n })),\n\n on(AdministrationActions.addingNewUserSucceeded, (state, action) => ({\n ...state,\n addNewUserInProgress: false,\n addedUser: action.user,\n })),\n\n on(AdministrationActions.addingNewUserFailed, (state, action) => ({\n ...state,\n addNewUserInProgress: false,\n addedUser: null,\n })),\n on(AdministrationActions.clearAddedUser, (state, action) => ({\n ...state,\n addedUser: null,\n })),\n\n on(AdministrationActions.startDeleteGeneralRole, (state, action) => ({\n ...state,\n deleteGeneralRoleInProgress: true,\n })),\n on(\n AdministrationActions.deleteGeneralRoleSucceeded,\n AdministrationActions.deleteGeneralRoleFailed,\n (state, action) => ({ ...state, deleteGeneralRoleInProgress: false })\n ),\n on(AdministrationActions.selectGeneralRoleToEdit, (state, action) => ({\n ...state,\n selectedGeneralRole: action.generalRole,\n })),\n on(AdministrationActions.clearSelectedGeneralRole, (state, action) => ({ ...state, selectedGeneralRole: undefined })),\n on(AdministrationActions.startSavingGeneralRole, (state, action) => ({ ...state, saveGeneralRoleInProgress: true })),\n on(\n AdministrationActions.savingGeneralRoleSucceeded,\n AdministrationActions.savingGeneralRoleFailed,\n (state, action) => ({ ...state, saveGeneralRoleInProgress: false })\n ),\n on(AdministrationActions.loadAllUserToProperyMappingsSucceeded, (state, action) => ({\n ...state,\n userToPropertyMapping: action.userToPropertyMapping,\n })),\n on(AdministrationActions.clearAllUserToPropertyMappings, (state, action) => ({\n ...state,\n userToPropertyMapping: undefined,\n })),\n on(AdministrationActions.setGeneralRoleRadioList, (state, action) => ({\n ...state,\n generalRoleRadioList: action.generalRoleRadioList,\n })),\n\n /**\n * invite User\n */\n on(AdministrationActions.inviteNewUser, (state, action) => ({\n ...state,\n userInviteInProgress: true,\n userInviteStatus: UpdateStatus.IN_PROGRESS,\n userInvited: null,\n })),\n on(AdministrationActions.inviteNewUserSuccess, (state, action) => ({\n ...state,\n userInviteInProgress: false,\n userInviteStatus: UpdateStatus.OK,\n userInvited: action.user,\n })),\n on(AdministrationActions.inviteNewUserError, (state, action) => ({\n ...state,\n userInviteInProgress: false,\n userInviteStatus: UpdateStatus.ERROR,\n userInvited: null,\n })),\n\n /**\n * update User\n */\n on(AdministrationActions.updateUserData, (state, action) => ({\n ...state,\n userUpdateInProgress: true,\n userUpdateStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(AdministrationActions.updateUserDataSuccess, (state, action) => ({\n ...state,\n userUpdateInProgress: false,\n userUpdateStatus: UpdateStatus.UPDATED,\n })),\n on(AdministrationActions.updateUserDataError, (state, action) => ({\n ...state,\n userUpdateInProgress: false,\n userUpdateStatus: UpdateStatus.ERROR,\n })),\n on(AdministrationActions.removeUser, (state, action) => ({\n ...state,\n removeUserInProgress: true,\n })),\n on(AdministrationActions.removeUserFailed, AdministrationActions.removeUserSucceeded, (state, action) => ({\n ...state,\n removeUserInProgress: false,\n })),\n\n /**\n * clear User Preview Data\n **/\n on(AdministrationActions.clearUserPreviewData, (state, action) => ({\n ...state,\n userUpdateInProgress: false,\n userUpdateStatus: null,\n userInviteInProgress: false,\n userInviteStatus: null,\n userInvited: null,\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: null,\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: null,\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: null,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nimport * as fromAdministration from '../reducers/administration.reducer';\n\nexport const selectAdministrationState = createFeatureSelector(\n fromAdministration.administrationFeatureKey\n);\n\nexport const selectActiveUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.activeUsers\n);\n\nexport const activeUserOrVendorOptionsList = createSelector(\n selectAdministrationState,\n administrationState => administrationState.activeUserOrVendorOptionsList\n);\n\nexport const selectInactiveUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.inactiveUsers\n);\n\nexport const selectAllUsers = createSelector(\n selectActiveUsers,\n selectInactiveUsers,\n (activeUsers, inactiveUsers) => [].concat(activeUsers).concat(inactiveUsers) as RestUserModel[]\n);\n\nexport const selectAllUsersLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.usersLoading\n);\n\nexport const selectAllPermissionLevels = createSelector(\n selectAdministrationState,\n administrationState => administrationState.permissionLevels\n);\n\nexport const selectAllGeneralRolesToPermissionMapping = createSelector(\n selectAdministrationState,\n administrationState => administrationState.generalRolesToPermissionMapping\n);\n\nexport const selectAllPropertyRoles = createSelector(\n selectAdministrationState,\n administrationState => administrationState.propertiesRoles\n);\n\nexport const selectAllUserToGeneralRoleMapping = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userToGeneralRole\n);\n\nexport const selectAllSelectedUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.selectedUsers\n);\n\nexport const selectAllGeneralRoles = createSelector(\n selectAdministrationState,\n administrationState => administrationState.generalRoles\n);\n\nexport const selectAllUsersWithGeneralRoles = createSelector(\n selectAdministrationState,\n administrationState => administrationState.usersWithGeneralRoles\n);\n\nexport const selectAllUsersWithGeneralRolesLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.usersWithGeneralRolesLoading\n);\n\nexport const selectAllPropertiesStructure = createSelector(\n selectAdministrationState,\n administrationState => administrationState.propertiesStructure\n);\n\n/**\n * save User To General Role\n */\nexport const selectSaveUserToGeneralRoleInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.saveUserToGeneralRoleInProgress\n);\n\nexport const selectSaveUserToGeneralRoleStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.saveUserToGeneralRoleStatus\n);\n/**\n * assign user into property\n */\nexport const selectAssignUserIntoPropertyInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.assignUserIntoPropertyInProgress\n);\n\nexport const selectAssignUserIntoPropertyStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.assignUserIntoPropertyStatus\n);\n\n/**\n * removing property assigned user\n */\nexport const selectRemovingPropertyAssignedUserInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.removingPropertyAssignedUserInProgress\n);\nexport const selectRemovingPropertyAssignedUserStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.removingPropertyAssignedUserStatus\n);\n\nexport const selectAddNewUserInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.addNewUserInProgress\n);\n\nexport const selectAddedUser = createSelector(\n selectAdministrationState,\n administrationState => administrationState.addedUser\n);\n\nexport const selectIsDeleteGeneralRoleInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.deleteGeneralRoleInProgress\n);\n\nexport const selectSelectedGeneralRole = createSelector(\n selectAdministrationState,\n administrationState => administrationState.selectedGeneralRole\n);\n\nexport const selectSavingGeneralRoleInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.saveGeneralRoleInProgress\n);\n\nexport const selectAllUserToPropertyMappings = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userToPropertyMapping\n);\n\nexport const selectPropertyUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.activePropertyUsers\n);\n\nexport const selectPropertyUsersLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.propertyUsersLoading\n);\n\nexport const selectGeneralRoleRadioList = createSelector(\n selectAdministrationState,\n administrationState => administrationState.generalRoleRadioList\n);\n\n/**\n * User invite\n **/\nexport const selectUserInviteInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userInviteInProgress\n);\n\nexport const selectUserInviteStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userInviteStatus\n);\n\nexport const selectUserInvited = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userInvited\n);\n\n/**\n * User Update\n **/\nexport const selectUserUpdateInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userUpdateInProgress\n);\n\nexport const selectUserUpdateStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userUpdateStatus\n);\n\n/**\n * User Remove\n **/\nexport const selectUserRemoveInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.removeUserInProgress\n);\n","import { Directive } from '@angular/core';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\n\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { selectUserPermissionLevel } from '@shared/selectors/user.selectors';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Directive()\nexport abstract class BoardsAbstract {\n hasEditRight = false;\n hasEditRight$: Observable;\n\n constructor(store: Store<{}>, protected snackbarService: SnackbarService) {\n this.hasEditRight$ = store.select(selectUserPermissionLevel).pipe(\n untilDestroyed(this),\n filter((permissionLevel: PermissionLevelType[]) => !!permissionLevel?.length),\n map(permissionLevels => checkPermissionLevel(permissionLevels, PermissionLevelType.Board_Edit)),\n tap(hasRight => (this.hasEditRight = hasRight))\n );\n this.hasEditRight$.subscribe();\n }\n\n checkEditRight(notify = true): boolean {\n if (!this.hasEditRight && notify) {\n this.snackbarService.warning(SnackbarErrorMessage.BoardEditPermissionRequired);\n }\n return this.hasEditRight;\n }\n}\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\nimport { Directive, Inject, Input, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\n@UntilDestroy()\n@Directive({\n selector: '[appDragCursor]',\n})\nexport class DragCursorDirective implements OnInit {\n @Input() cursor = 'grabbing';\n\n constructor(@Inject(DOCUMENT) private document: Document, private cdkDrag: CdkDrag) {}\n\n public ngOnInit(): void {\n this.cdkDrag.started.pipe(untilDestroyed(this)).subscribe(() => {\n this.document.body.style.cursor = this.cursor;\n });\n\n this.cdkDrag.ended.pipe(untilDestroyed(this)).subscribe(() => {\n this.document.body.style.cursor = 'auto';\n });\n }\n}\n","export enum BoardColumnType {\n Unselected = 0,\n Unit = 'Unit',\n Comments = 'Comments',\n PropertyName = 'PropertyName',\n\n // == Date ==\n MoveIn = 'MoveIn',\n MoveOut = 'MoveOut',\n Available = 'Available',\n Showable = 'Showable',\n CustomDate = 'CustomDate',\n\n // == Dollar ==\n NewRent = 'NewRent',\n OldRent = 'OldRent',\n MarketRent = 'MarketRent',\n AdvertisedRent = 'AdvertisedRent',\n CustomAmount = 'CustomAmount',\n UnitTotal = 'UnitTotal',\n Budget = 'Budget',\n Delta = 'Variance',\n\n // == Info ==\n UnitType = 'UnitType',\n NewTenant = 'NewTenant',\n\n // == Enum ==\n NewFinish = 'NewFinish',\n OldFinish = 'OldFinish',\n Finish = 'Finish',\n\n // == Schedule ==\n Simple = 'Simple',\n Timed = 'Timed',\n Workorder = 'Workorder',\n\n // == Time ==\n Days = 'Days', // -- days in current step\n TotalDays = 'TotalDays', // -- days since move-out date\n}\n\nexport enum BoardType {\n MakeReady,\n Reno,\n Marketing,\n Custom,\n Eviction,\n MoveOut,\n MoveIn,\n Approval,\n NonPms,\n}\n\nexport enum BoardOutputType {\n SendToApproval,\n SendToLeaseUpOrMoveIn,\n None,\n SendToMoveOut,\n SendToMakeReady,\n SendToPunch,\n SendToReno,\n SendToArchive,\n}\n\nexport enum BoardOutputBehaviour {\n Manually,\n Automatically,\n}\n\nexport enum BoardProgressType {\n None,\n UpdateMakeReadyProgressBar,\n UpdateRENOProgressBar,\n UpdateNoticeProgressBar,\n UpdateMoveInProgressBar,\n UpdateMoveOutProgressBar,\n UpdateApprovalProgressBar,\n}\n\nexport enum BoardSourceType {\n MakeReadyUnits,\n RenoUnits,\n UnleasedUnits,\n OnNoticeUnits,\n MoveOutUnits,\n MarketingUnits,\n OnNoticeAndUnleasedUnits,\n Manual,\n UnitsInNoticeUnderEviction,\n UnitsInMoveIn,\n UnitsInApproval,\n UnitsInPunch,\n None,\n NonPmsUnits,\n}\n\nexport enum BoardMakeReadySteps {\n TrashOut = 'Trash out',\n Painting = 'Painting',\n Hardware = 'Hardware',\n Flooring = 'Flooring',\n RemoveOldApp = 'Remove old app.',\n InstallNewApp = 'Install new app.',\n}\n\nexport enum ScheduleCellStatus {\n Due,\n Skipped,\n Done,\n Late,\n Unscheduled,\n Pending,\n Moved,\n}\n\nexport enum BoardView {\n Unit,\n Calendar,\n}\n","import { extend } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { InspectionType } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\n\nimport {\n BoardColumnType,\n BoardOutputBehaviour,\n BoardOutputType,\n BoardProgressType,\n BoardSourceType,\n BoardType,\n ScheduleCellStatus,\n} from './board.enums';\nimport { CellValueHelper } from '../services/cell-value.helper';\n\nexport class RestTurnStepScheduleBaseModel {\n turnoverDateAvailable: Date;\n turnoverDateShowable: Date;\n dateCompleted: Date;\n originalDueDate: Date;\n}\n\nexport class RestTurnStepScheduleModel extends RestTurnStepScheduleBaseModel {\n id: number;\n turnoverId: number;\n boardColumnUID: string;\n boardLayoutsId: number;\n workflowStepId: number;\n assignee: number;\n notifyAssignee: boolean;\n dueDate: Date;\n status: ScheduleCellStatus;\n note: string;\n sortOrder: number;\n amount?: number;\n inspectionId?: number;\n inspectionType?: InspectionType;\n inspectionTemplateId?: number;\n inspectionItemsCompleted?: number;\n inspectionItemsTotal?: number;\n}\n\nexport class RestBoardModel {\n id: number;\n name: string;\n allPortfolios: boolean;\n selectedPortfolioIds?: string;\n boardType: BoardType;\n boardColumnsConfig: string;\n progressType: BoardProgressType;\n datasource: BoardSourceType;\n outputAction: BoardOutputType;\n outputBehaviour: BoardOutputBehaviour;\n boardCellColor: string;\n\n constructor(board: Board) {\n this.id = board.id;\n this.name = board.name;\n this.progressType = board.progressType;\n this.datasource = board.datasource;\n this.boardType = board.boardType;\n this.outputAction = board.outputAction;\n this.outputBehaviour = board.outputBehaviour;\n this.boardCellColor = board.boardCellColor;\n this.allPortfolios = board.allPortfolios;\n this.selectedPortfolioIds = board.selectedPortfolioIds?.length ? board.selectedPortfolioIds.join(',') : undefined;\n this.boardColumnsConfig = JSON.stringify(board.columns.filter(e => e.type !== BoardColumnType.Unselected));\n }\n}\n\nfunction isBoardResponse(entity: any): entity is RestBoardModel {\n return (\n typeof entity.datasource === 'number' &&\n typeof entity.id === 'number' &&\n typeof entity.boardColumnsConfig === 'string' &&\n typeof entity.name === 'string'\n );\n}\n\nexport interface BoardConfiguration {\n id: number;\n name: string;\n allPortfolios: boolean;\n selectedPortfolioIds?: number[];\n boardType: BoardType;\n progressType: BoardProgressType;\n datasource: BoardSourceType;\n outputAction: BoardOutputType;\n outputBehaviour: BoardOutputBehaviour;\n boardCellColor: string;\n}\n\nexport class Board implements BoardConfiguration {\n id: number;\n name: string;\n allPortfolios: boolean;\n selectedPortfolioIds?: number[];\n boardType: BoardType;\n progressType: BoardProgressType;\n datasource: BoardSourceType;\n outputAction: BoardOutputType;\n outputBehaviour: BoardOutputBehaviour;\n boardCellColor: string;\n columns: BoardColumn[] = [];\n\n constructor(config: BoardConfiguration | RestBoardModel) {\n if (isBoardResponse(config)) {\n const columns = JSON.parse(config.boardColumnsConfig);\n if (Array.isArray(columns)) {\n this.columns = columns.filter(e => isBoardColumn(e));\n this.columns.forEach(c => (c.id = c.id ?? uuidv4()));\n\n const propertyColumnIndex = this.columns.findIndex(c => c.type == BoardColumnType.PropertyName);\n let unitColumnIndex = this.columns.findIndex(c => c.type == BoardColumnType.Unit);\n\n if (propertyColumnIndex === -1 || propertyColumnIndex !== unitColumnIndex + 1) {\n // make Property columns always next after Unit\n if (propertyColumnIndex !== -1) {\n this.columns.splice(propertyColumnIndex, 1);\n }\n unitColumnIndex = this.columns.findIndex(c => c.type == BoardColumnType.Unit);\n\n this.columns.splice(unitColumnIndex + 1, 0, {\n id: uuidv4(),\n name: 'Property',\n type: BoardColumnType.PropertyName,\n editable: false,\n visible: true,\n frozen: false,\n });\n }\n } else {\n this.initDefaultColumns();\n }\n this.id = config.id;\n this.name = config.name;\n this.progressType = config.progressType;\n this.boardType = config.boardType;\n this.datasource = config.datasource;\n this.outputAction = config.outputAction;\n this.outputBehaviour = config.outputBehaviour;\n this.selectedPortfolioIds = config.selectedPortfolioIds\n ? config.selectedPortfolioIds.split(',').map(Number)\n : undefined;\n this.allPortfolios = config.allPortfolios;\n this.boardCellColor = config.boardCellColor ?? '#ffffff';\n } else {\n extend(this, config);\n this.initDefaultColumns();\n }\n }\n\n addColumn(\n name: string,\n type: BoardColumnType,\n editable = true,\n workflowStep = null,\n visible = true,\n frozen = false,\n poisition?: number\n ): string {\n const id = uuidv4();\n const column = {\n id,\n name,\n type,\n workflowStep,\n editable,\n visible,\n frozen,\n };\n if (poisition === undefined) {\n this.columns.push(column);\n } else {\n this.columns.splice(poisition, 0, column);\n }\n return id;\n }\n\n private initDefaultColumns() {\n this.addColumn('Unit', BoardColumnType.Unit, false, null, true, true);\n this.addColumn('Property', BoardColumnType.PropertyName, false, null, true, true);\n\n switch (this.boardType) {\n case BoardType.MakeReady:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Trash out', BoardColumnType.Simple);\n this.addColumn('Paint', BoardColumnType.Simple);\n this.addColumn('Flooring', BoardColumnType.Simple);\n this.addColumn('Clean', BoardColumnType.Simple);\n break;\n case BoardType.Reno:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Demo', BoardColumnType.Simple);\n this.addColumn('Paint', BoardColumnType.Simple);\n this.addColumn('Flooring', BoardColumnType.Simple);\n this.addColumn('Trimout', BoardColumnType.Simple);\n this.addColumn('Appliances', BoardColumnType.Simple);\n this.addColumn('Final clean', BoardColumnType.Simple);\n break;\n case BoardType.Marketing:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Type', BoardColumnType.UnitType, false);\n this.addColumn('Finish', BoardColumnType.Finish, false);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Adv.Rent', BoardColumnType.AdvertisedRent, false);\n this.addColumn('Market Rent', BoardColumnType.MarketRent, false);\n break;\n case BoardType.Eviction:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('NTV', BoardColumnType.Simple);\n this.addColumn('Eviction Filed', BoardColumnType.Simple);\n this.addColumn('Hearing', BoardColumnType.Simple);\n this.addColumn('Judgment', BoardColumnType.Simple);\n this.addColumn('Appeal', BoardColumnType.Simple);\n this.addColumn('Writ Filed', BoardColumnType.Simple);\n this.addColumn('Writ Posted', BoardColumnType.Simple);\n this.addColumn('Writ Executed', BoardColumnType.Simple);\n break;\n case BoardType.MoveIn:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Application', BoardColumnType.Simple);\n this.addColumn('Set MI Date', BoardColumnType.Simple);\n this.addColumn('Lease signed', BoardColumnType.Simple);\n this.addColumn('Key prep', BoardColumnType.Simple);\n this.addColumn('Final Sparkle', BoardColumnType.Simple);\n this.addColumn('Key handover', BoardColumnType.Simple);\n this.addColumn('MI Inspection', BoardColumnType.Simple);\n this.addColumn('PMS MoveIn', BoardColumnType.Simple);\n break;\n case BoardType.MoveOut:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Inspection', BoardColumnType.Simple);\n this.addColumn('Bid', BoardColumnType.Simple);\n this.addColumn('Keys', BoardColumnType.Simple);\n this.addColumn('Deposit', BoardColumnType.Simple);\n this.addColumn('PMS MoveOut', BoardColumnType.Simple);\n this.addColumn('Marketing', BoardColumnType.Simple);\n break;\n case BoardType.Approval:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Blue Tape', BoardColumnType.Simple);\n this.addColumn('Final Clean', BoardColumnType.Simple);\n break;\n case BoardType.Custom:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Anything', BoardColumnType.Simple);\n this.addColumn('your', BoardColumnType.Simple);\n this.addColumn('heart', BoardColumnType.Simple);\n this.addColumn('desires!', BoardColumnType.Simple);\n break;\n default:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Trash out', BoardColumnType.Simple);\n this.addColumn('Hardware', BoardColumnType.Simple);\n break;\n }\n }\n}\n\nexport type Sorting = 'ascending' | 'descending' | null;\n\nexport class ColumnSorting {\n columnId: string;\n sortFunction: (e1: RestTurnoverTaskModel, e2: RestTurnoverTaskModel) => number;\n\n constructor(column: BoardColumn, sorting: Sorting, primaryValue: boolean, private cellValueHelper: CellValueHelper) {\n this.columnId = column.id;\n const fieldFunction = this.getComparedValueFunction(column, this.columnId, primaryValue);\n this.sortFunction =\n fieldFunction == null\n ? null\n : (e1, e2) => {\n const value1 = fieldFunction(e1);\n const value2 = fieldFunction(e2);\n if (value1 != value2) {\n return (value1 > value2 ? 1 : -1) * (sorting == 'ascending' ? 1 : -1);\n }\n return 0;\n };\n }\n\n private getComparedValueFunction(\n column: BoardColumn,\n columnId: string,\n primaryValue: boolean\n ): (e: RestTurnoverTaskModel) => string | number {\n return primaryValue ? e => this.cellValueHelper.getComparableValue(column, e, columnId) : e => e.phasePriority;\n }\n}\n\nexport class BoardColumn {\n id: string;\n editable: boolean;\n name: string;\n type: BoardColumnType;\n workflowStep?: WorkflowStepEnumType;\n inspectionTemplateId?: number;\n frozen = false;\n visible = true;\n\n constructor(config: Partial) {\n Object.assign(this, config);\n this.id = this.id ?? uuidv4();\n }\n}\n\nfunction isBoardColumn(entity: any): entity is BoardColumn {\n return typeof entity.name === 'string' && typeof entity.type === 'string';\n}\n\nexport const isColumnSummable = (column: BoardColumn): boolean => {\n return [\n BoardColumnType.CustomAmount,\n BoardColumnType.Simple,\n BoardColumnType.UnitTotal,\n BoardColumnType.Budget,\n BoardColumnType.Delta,\n ].includes(column.type);\n};\n\nexport const isCostColumn = (column: BoardColumn): boolean => {\n return [BoardColumnType.CustomAmount, BoardColumnType.Simple].includes(column.type);\n};\n\nexport const ProgressTypeList: IRadioButtonOption[] = [\n {\n label: 'None',\n value: BoardProgressType.None,\n },\n {\n label: 'MAKE READY',\n value: BoardProgressType.UpdateMakeReadyProgressBar,\n },\n {\n label: 'RENO',\n value: BoardProgressType.UpdateRENOProgressBar,\n },\n {\n label: 'NOTICE',\n value: BoardProgressType.UpdateNoticeProgressBar,\n },\n {\n label: 'MOVE IN',\n value: BoardProgressType.UpdateMoveInProgressBar,\n },\n {\n label: 'MOVE OUT',\n value: BoardProgressType.UpdateMoveOutProgressBar,\n },\n {\n label: 'APPROVAL',\n value: BoardProgressType.UpdateApprovalProgressBar,\n },\n];\n\nexport const BoardSourceTypeList: IRadioButtonOption[] = [\n {\n label: 'MAKE READY',\n value: BoardSourceType.MakeReadyUnits,\n },\n {\n label: 'RENO',\n value: BoardSourceType.RenoUnits,\n },\n {\n label: 'Unleased',\n value: BoardSourceType.UnleasedUnits,\n },\n {\n label: 'NOTICE',\n value: BoardSourceType.OnNoticeUnits,\n },\n {\n label: 'MOVE OUT',\n value: BoardSourceType.MoveOutUnits,\n },\n {\n label: 'NOTICE and Unleased',\n value: BoardSourceType.OnNoticeAndUnleasedUnits,\n },\n {\n label: 'NOTICE under Eviction',\n value: BoardSourceType.UnitsInNoticeUnderEviction,\n },\n {\n label: 'APPROVAL',\n value: BoardSourceType.UnitsInApproval,\n },\n {\n label: 'MOVE IN',\n value: BoardSourceType.UnitsInMoveIn,\n },\n {\n label: 'PUNCH',\n value: BoardSourceType.UnitsInPunch,\n },\n {\n label: 'Non-PMS',\n value: BoardSourceType.NonPmsUnits,\n },\n];\n\nexport const BoardTypeList: IRadioButtonOption[][] = [\n [\n {\n label: 'Make Ready',\n value: BoardType.MakeReady,\n },\n {\n label: 'Reno',\n value: BoardType.Reno,\n },\n {\n label: 'Marketing',\n value: BoardType.Marketing,\n },\n {\n label: 'Eviction',\n value: BoardType.Eviction,\n },\n {\n label: 'Move In',\n value: BoardType.MoveIn,\n },\n {\n label: 'Move Out',\n value: BoardType.MoveOut,\n },\n {\n label: 'Approval',\n value: BoardType.Approval,\n },\n {\n label: 'Non-PMS',\n value: BoardType.NonPms,\n },\n ],\n [\n {\n label: 'Custom',\n value: BoardType.Custom,\n },\n ],\n];\n\nexport const BoardOutputBehaviourList: IRadioButtonOption[] = [\n {\n label: 'Automatically',\n value: BoardOutputBehaviour.Automatically,\n },\n {\n label: 'Manually',\n value: BoardOutputBehaviour.Manually,\n },\n];\n\nexport const BoardOutputTypeList: IRadioButtonOption[] = [\n {\n label: 'None',\n value: BoardOutputType.None,\n },\n {\n label: 'APPROVAL',\n value: BoardOutputType.SendToApproval,\n },\n {\n label: 'LEASE UP/MOVE IN',\n value: BoardOutputType.SendToLeaseUpOrMoveIn,\n },\n {\n label: 'MOVE OUT',\n value: BoardOutputType.SendToMoveOut,\n },\n {\n label: 'MAKE READY',\n value: BoardOutputType.SendToMakeReady,\n },\n {\n label: 'PUNCH',\n value: BoardOutputType.SendToPunch,\n },\n {\n label: 'RENO',\n value: BoardOutputType.SendToReno,\n },\n {\n label: 'ARCHIVE',\n value: BoardOutputType.SendToArchive,\n },\n];\n\nexport const disallowSourceTypeOutputTypeMap: Record = {\n [BoardSourceType.MakeReadyUnits]: BoardOutputType.SendToMakeReady,\n [BoardSourceType.UnitsInPunch]: BoardOutputType.SendToPunch,\n [BoardSourceType.RenoUnits]: BoardOutputType.SendToReno,\n [BoardSourceType.MoveOutUnits]: BoardOutputType.SendToMoveOut,\n [BoardSourceType.UnitsInMoveIn]: BoardOutputType.SendToLeaseUpOrMoveIn,\n [BoardSourceType.UnitsInApproval]: BoardOutputType.SendToApproval,\n};\n\nexport function getNextStepType(outputAction: BoardOutputType, turnover: RestTurnoverTaskModel): WorkflowStepEnumType {\n switch (outputAction) {\n case BoardOutputType.SendToLeaseUpOrMoveIn:\n return turnover.turnoverData.dateMoveIn !== null ? WorkflowStepEnumType.MoveIn : WorkflowStepEnumType.LeaseUp;\n case BoardOutputType.SendToApproval:\n return WorkflowStepEnumType.Approval;\n case BoardOutputType.SendToMoveOut:\n return WorkflowStepEnumType.MoveOut;\n case BoardOutputType.SendToReno:\n return WorkflowStepEnumType.Reno;\n case BoardOutputType.SendToMakeReady:\n return WorkflowStepEnumType.MakeReady;\n case BoardOutputType.SendToPunch:\n return WorkflowStepEnumType.Punch;\n case BoardOutputType.SendToArchive:\n return WorkflowStepEnumType.Archive;\n case BoardOutputType.None:\n return null;\n default:\n return WorkflowStepEnumType.Approval;\n }\n}\n\nexport function getCurrentStep(sourceType: BoardSourceType): WorkflowStepEnumType {\n switch (sourceType) {\n case BoardSourceType.MakeReadyUnits:\n return WorkflowStepEnumType.MakeReady;\n case BoardSourceType.RenoUnits:\n return WorkflowStepEnumType.Reno;\n case BoardSourceType.OnNoticeUnits:\n return WorkflowStepEnumType.Notice;\n case BoardSourceType.MoveOutUnits:\n return WorkflowStepEnumType.MoveOut;\n case BoardSourceType.MarketingUnits:\n return WorkflowStepEnumType.Marketing;\n case BoardSourceType.OnNoticeAndUnleasedUnits:\n return WorkflowStepEnumType.Notice;\n case BoardSourceType.UnitsInNoticeUnderEviction:\n return WorkflowStepEnumType.Notice;\n case BoardSourceType.UnitsInMoveIn:\n return WorkflowStepEnumType.MoveIn;\n case BoardSourceType.UnitsInApproval:\n return WorkflowStepEnumType.Approval;\n case BoardSourceType.UnitsInPunch:\n return WorkflowStepEnumType.Punch;\n default:\n return WorkflowStepEnumType.MoveOut;\n }\n}\n","import { Subject } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\ninterface CustomInspectionChangeConfig {\n emitChange?: boolean;\n emitChangeTemplate?: boolean;\n}\nexport class CustomInspectionContent {\n items: RestCustomInspectionContentItemModel[];\n private _itemsChanged = new Subject();\n itemsChanges$ = this._itemsChanged.asObservable();\n\n private _templateChanges = new Subject();\n templateChanges$ = this._templateChanges.asObservable();\n constructor(items: RestCustomInspectionContentItemModel[] = []) {\n this.init(items);\n }\n\n init(items: RestCustomInspectionContentItemModel[]) {\n this.items = [...items].sort((a, b) => {\n if (a.position > b.position) return 1;\n if (a.position < b.position) return -1;\n return 0;\n });\n }\n\n addItem(inspectionItemName: string) {\n const inspectionItemId = uuidv4();\n this.items.push({\n inspectionItemId,\n inspectionItemName,\n inspectionItemChecked: false,\n });\n this.onItemChanged();\n\n return inspectionItemId;\n }\n\n removeItem(id: string) {\n this.items = [...this.items.filter(item => item.inspectionItemId !== id)];\n this.onItemChanged();\n }\n\n updateItemName(item: RestCustomInspectionContentItemModel) {\n this.items = this.items.map(innerItem =>\n innerItem.inspectionItemId !== item.inspectionItemId\n ? innerItem\n : { ...innerItem, inspectionItemName: item.inspectionItemName }\n );\n this.onItemChanged();\n }\n updateItemChecked(item: RestCustomInspectionContentItemModel, config?: CustomInspectionChangeConfig) {\n this.items = this.items.map(innerItem =>\n innerItem.inspectionItemId !== item.inspectionItemId\n ? innerItem\n : { ...innerItem, inspectionItemChecked: item.inspectionItemChecked }\n );\n this.onItemChanged({ ...{ emitChangeTemplate: false }, ...config });\n }\n\n get templateItems() {\n return this.items.map(item => ({ ...item, inspectionItemChecked: false }));\n }\n\n onItemChanged(config: CustomInspectionChangeConfig = {}) {\n const options = { ...{ emitChange: true, emitChangeTemplate: true }, ...config };\n for (let i = 0; i < this.items.length; i++) {\n this.items[i].position = i;\n }\n if (options.emitChange) {\n this._itemsChanged.next(this.items);\n }\n\n if (options.emitChangeTemplate) {\n this._templateChanges.next();\n }\n }\n\n get totalItemsCount(): number {\n return this.items.length;\n }\n\n get checkedItemsCount(): number {\n return this.items.filter(item => item.inspectionItemChecked).length;\n }\n\n get progressBar(): number {\n return this.totalItemsCount ? (this.checkedItemsCount / this.totalItemsCount) * 100 : 100;\n }\n}\n\nexport interface RestCustomInspectionModel {\n id?: number;\n inspectionName: string;\n isRequired?: boolean;\n}\nexport interface RestCustomInspectionContentItemModel {\n inspectionItemName: string;\n inspectionItemChecked: boolean | null;\n inspectionItemId?: string;\n position?: number;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, finalize, switchMap } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport {\n CustomInspectionContent,\n RestCustomInspectionContentItemModel,\n RestCustomInspectionModel,\n} from '@main-application/boards/interfaces/custom-inspection';\nimport { ConfirmationModalData } from '@shared/interfaces/modal-data';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomInspectionService {\n private readonly route = 'inspections/';\n _templatesLoading = new BehaviorSubject(false);\n templatesLoading$ = this._templatesLoading.asObservable();\n constructor(private service: RestapiService, private modalsService: ModalsService) {}\n\n getInspectionTemplates(preserveInspectionId?: number) {\n this._templatesLoading.next(true);\n return this.service\n .getData(this.route + 'template/list?filterUnavailableTemplates=false')\n .pipe(\n map(templates => {\n if (!templates?.length) {\n return [];\n }\n const filteredTemplates = templates.filter(\n template => template.isAvailable || template.id === preserveInspectionId\n );\n return filteredTemplates.sort((a, b) => {\n if (a.name === b.name) return 0;\n return a.name > b.name ? 1 : -1;\n });\n }),\n finalize(() => {\n this._templatesLoading.next(false);\n })\n );\n }\n\n getCustomInspectionContent(inspectionId: number) {\n return this.service.getData(\n this.route + 'getCustomInspectionContent/' + inspectionId\n );\n }\n\n updateCustomInspectionContent(inspectionId: number, data: RestCustomInspectionContentItemModel[]) {\n return this.service.post(\n this.route + 'updateCustomInspection/' + inspectionId,\n data\n );\n }\n\n addCustomInspectionTemplateWithPredefinedItems(data: RestCustomInspectionModel) {\n return this.service.post(this.route + 'template/addCustomInspection', data).pipe(\n switchMap(id => {\n const inspection = new CustomInspectionContent();\n inspection.addItem('Item 1');\n inspection.addItem('Item 2');\n inspection.addItem('Item 3');\n return this.updateCustomInspectionTemplateContent(id, inspection.items).pipe(\n map(items => [id, items] as const)\n );\n })\n );\n }\n\n addCustomInspectionTemplateWithItems(data: RestCustomInspectionModel, items: RestCustomInspectionContentItemModel[]) {\n return this.service.post(this.route + 'template/addCustomInspection', data).pipe(\n switchMap(id => {\n return this.updateCustomInspectionTemplateContent(id, items).pipe(map(items => [id, items] as const));\n })\n );\n }\n\n addCustomInspectionTemplate(data: RestCustomInspectionModel) {\n return this.service.post(this.route + 'template/addCustomInspection', data);\n }\n\n editCustomInspectionTemplate(inspectionId: number, data: RestCustomInspectionModel) {\n return this.service.post(\n this.route + 'template/editCustomInspection/' + inspectionId,\n data\n );\n }\n\n updateCustomInspectionTemplateContent(inspectionId: number, data: RestCustomInspectionContentItemModel[]) {\n return this.service.post(\n this.route + 'template/updateCustomInspectionContent/' + inspectionId,\n data\n );\n }\n\n getInspectionTemplate(inspectionId: number) {\n return this.service.getData(this.route + 'template/' + inspectionId);\n }\n\n getCustomInspectionTemplateContent(templateId: number) {\n return this.service.getData(\n this.route + 'template/getCustomInspectionContent/' + templateId\n );\n }\n\n hideInspectionTemplate(template: RestTemplateModel) {\n const removableTemplate = { ...template, isAvailable: false };\n return this.service.post(this.route + 'template/edit', removableTemplate);\n }\n\n openRemovalTemplateModal(inspectionTemplate: RestTemplateModel, data: ConfirmationModalData = {}) {\n return this.modalsService.openConfirmationModal(\n {\n ...{\n title: `Delete ${inspectionTemplate.name} template?`,\n titleCss: 'fade-truncate',\n content: `This will delete it as a template from all boards. Are you feeling this confident? 💪`,\n cancelLabel: 'Yikes, no!',\n confirmLabel: 'Yes, delete it',\n confirmColor: 'warn',\n },\n ...data,\n },\n 360\n );\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestBoardModel } from '@main-application/boards/interfaces/board';\n\nexport const closeMenus = createAction('[Boards] close menus');\n\nexport const loadBoardList = createAction('[Boards] loadBoardList');\nexport const loadBoardListSuccess = createAction(\n '[Boards] loadBoardListSuccess',\n props<{ boards: RestBoardModel[] }>()\n);\nexport const loadBoardListFailed = createAction('[Boards] loadBoardListFailed');\n","export enum CompanyForm {\n ID = 'id',\n DISPLAY_NAME = 'displayName',\n LEGAL_NAME = 'legalName',\n WEBSITE = 'website',\n CONTACT_PERSON_ID = 'contactPersonId',\n IS_ACTIVE = 'isActive',\n\n ADDRESS = 'address',\n\n ADDRESS_TYPE = 'addressType',\n TITLE = 'title',\n STREET1 = 'street1',\n STREET2 = 'street2',\n CITY = 'city',\n STATE = 'state',\n ZIP = 'zip',\n WHOLE_OBJECT = 'wholeObject',\n}\n","import { ChangeDetectorRef, Injectable } from '@angular/core';\n\nimport { CompanyForm } from '@companies/config/enums/company-form';\nimport { DashboardsAbstract } from '@dashboards/components/abstract/dashboards.abstract';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\n\n@Injectable()\nexport abstract class CompaniesAbstract extends DashboardsAbstract {\n isLoading = false;\n companyModel: RestCompanyModel;\n\n protected constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n get CompanyForm(): typeof CompanyForm {\n return CompanyForm;\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\nimport { PostCompanyAddressModel, RestCompanyModel, UpdateEmployeeItem } from '@shared/interfaces/companies.interface';\nimport { RestContractorModel } from '@shared/interfaces/contractors.interface';\nimport { InviteRestUserModel } from '@shared/interfaces/user.interface';\n\n/**\n * get companies list\n */\nexport const getCompaniesList = createAction('[Companies] get companies list');\nexport const getCompaniesListSuccess = createAction(\n '[Companies] get companies list success',\n props<{ companyList: RestCompanyModel[] }>()\n);\nexport const getCompaniesListFailed = createAction('[Companies] get companies list failed');\n\n/**\n * add company\n */\nexport const addCompany = createAction('[Companies] add company', props<{ companyModel: RestCompanyModel }>());\nexport const addCompanySuccess = createAction(\n '[Companies] add company success',\n props<{ companyModel: RestCompanyModel }>()\n);\nexport const addCompanyFailed = createAction('[Companies] add company failed');\n\nexport const addCompanyWithOwner = createAction(\n '[Companies] add company with owner',\n props<{ companyModel: RestCompanyModel; roleId: number; user: InviteRestUserModel }>()\n);\nexport const addCompanyWithOwnerSuccess = createAction(\n '[Companies] add company with assignee success',\n props<{ company: RestCompanyModel }>()\n);\nexport const addCompanyWithOwnerFailure = createAction('[Companies] add company with assignee failure');\n/**\n * get company\n */\nexport const getCompany = createAction('[Companies] get company', props<{ companyId: number }>());\nexport const getCompanySuccess = createAction(\n '[Companies] get company success',\n props<{ companyModel: RestCompanyModel }>()\n);\nexport const getCompanyFailed = createAction('[Companies] get company failed');\nexport const clearCompany = createAction('[Companies] clear company');\n\n/**\n * update company\n */\nexport const updateCompany = createAction('[Companies] update company', props<{ companyModel: RestCompanyModel }>());\nexport const updateCompanySuccess = createAction(\n '[Companies] update company success',\n props<{ companyModel: RestCompanyModel }>()\n);\nexport const updateCompanyFailed = createAction('[Companies] update company failed');\n\n/**\n * delete company\n */\nexport const deleteCompany = createAction('[Companies] delete company', props<{ companyId: number }>());\nexport const deleteCompanySuccess = createAction('[Companies] delete company success');\nexport const deleteCompanyFailed = createAction('[Companies] delete company failed');\n\n/**\n * add employee to company\n */\nexport const addEmployeeToCompany = createAction(\n '[Companies] add employee to company',\n props<{ updateEmployeeItem: UpdateEmployeeItem }>()\n);\nexport const addEmployeeToCompanySuccess = createAction('[Companies] add employee to company success');\nexport const addEmployeeToCompanyFailed = createAction('[Companies] add employee to company failed');\n\n/**\n * delete employee from company\n */\nexport const deleteEmployeeFromCompany = createAction(\n '[Companies] delete employee from company',\n props<{ updateEmployeeItem: UpdateEmployeeItem }>()\n);\nexport const deleteEmployeeFromCompanySuccess = createAction('[Companies] delete employee from company success');\nexport const deleteEmployeeFromCompanyFailed = createAction('[Companies] delete employee from company failed');\n\n/**\n * get contractor list\n */\nexport const getContractorList = createAction('[Companies] get contractor listy');\nexport const getContractorListSuccess = createAction(\n '[Companies] get contractor list success',\n props<{ contractors: RestContractorModel[] }>()\n);\nexport const getContractorListFailed = createAction('[Companies] get contractor list failed');\n\n/**\n * add address to company\n */\nexport const addAddressToCompany = createAction(\n '[Companies] add address to company',\n props<{ postCompanyAddressModel: PostCompanyAddressModel }>()\n);\nexport const addAddressToCompanySuccess = createAction('[Companies] add address to company success');\nexport const addAddressToCompanyFailed = createAction('[Companies] add address to company failed');\n\n/**\n * update address in company\n */\nexport const updateAddressInCompany = createAction(\n '[Companies] update address in company',\n props<{ restAddressModel: RestAddressModel; companyId: number }>()\n);\nexport const updateAddressInCompanySuccess = createAction('[Companies] update address in company success');\nexport const updateAddressInCompanyFailed = createAction('[Companies] update address in company failed');\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\n\nimport { CompaniesAbstract } from '@companies/abstract/companies-abstract';\nimport { addCompany } from '@companies/actions/companies.actions';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\n\n@Component({\n selector: 'app-add-new-company-modal',\n templateUrl: './add-new-company-modal.component.html',\n styleUrls: ['./add-new-company-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddNewCompanyModalComponent extends CompaniesAbstract implements OnInit {\n form: UntypedFormGroup;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n private store: Store<{}>,\n private formBuilder: UntypedFormBuilder\n ) {\n super(cdr);\n }\n\n get displayName(): UntypedFormControl {\n return this.form.get(this.CompanyForm.DISPLAY_NAME) as UntypedFormControl;\n }\n\n get legalName(): UntypedFormControl {\n return this.form.get(this.CompanyForm.LEGAL_NAME) as UntypedFormControl;\n }\n\n ngOnInit(): void {\n this.initForm();\n }\n\n cancel() {\n this.dialogRef.close(null);\n }\n\n save() {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const companyModel: RestCompanyModel = {\n id: 0,\n displayName: this.displayName.value,\n legalName: this.legalName.value,\n contactPersonId: 0,\n employees: [],\n addresses: [],\n };\n\n this.store.dispatch(addCompany({ companyModel }));\n this.dialogRef.close(null);\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [this.CompanyForm.DISPLAY_NAME]: [null, [Validators.required]],\n [this.CompanyForm.LEGAL_NAME]: [null, [Validators.required]],\n });\n }\n}\n","
\n

Add new vendor

\n \n
\n
\n \n \n
\n
\n
\n \n \n \n \n
\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n addAddressToCompany,\n addAddressToCompanyFailed,\n addAddressToCompanySuccess,\n addCompany,\n addCompanyFailed,\n addCompanySuccess,\n addCompanyWithOwner,\n addCompanyWithOwnerFailure,\n addCompanyWithOwnerSuccess,\n addEmployeeToCompany,\n addEmployeeToCompanyFailed,\n addEmployeeToCompanySuccess,\n clearCompany,\n deleteCompany,\n deleteCompanyFailed,\n deleteCompanySuccess,\n deleteEmployeeFromCompany,\n deleteEmployeeFromCompanyFailed,\n deleteEmployeeFromCompanySuccess,\n getCompaniesList,\n getCompaniesListFailed,\n getCompaniesListSuccess,\n getCompany,\n getCompanyFailed,\n getCompanySuccess,\n getContractorList,\n getContractorListFailed,\n getContractorListSuccess,\n updateAddressInCompany,\n updateAddressInCompanyFailed,\n updateAddressInCompanySuccess,\n updateCompany,\n updateCompanyFailed,\n updateCompanySuccess,\n} from '@companies/actions/companies.actions';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { RestContractorModel } from '@shared/interfaces/contractors.interface';\n\nexport const companiesFeatureKey = 'companies';\n\nexport interface State {\n companyList: RestCompanyModel[];\n companyListLoading: boolean;\n companyAddLoading: boolean;\n companyModel: RestCompanyModel;\n companyModelLoading: boolean;\n addEmployeeToCompanyLoading: boolean;\n deleteEmployeeFromCompanyLoading: boolean;\n contractors: RestContractorModel[];\n contractorsLoading: boolean;\n companyUpdateLoading: boolean;\n companyDeleteLoading: boolean;\n addAddressToCompany: boolean;\n updateAddressInProgress: boolean;\n addCompanyWithOwnerInProgress: boolean;\n}\n\nexport const initialState: State = {\n companyList: [],\n companyListLoading: false,\n companyAddLoading: false,\n companyModel: null,\n companyModelLoading: false,\n addEmployeeToCompanyLoading: false,\n deleteEmployeeFromCompanyLoading: false,\n contractors: [],\n contractorsLoading: false,\n companyUpdateLoading: false,\n companyDeleteLoading: false,\n addAddressToCompany: false,\n updateAddressInProgress: false,\n addCompanyWithOwnerInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * get companies list\n */\n on(getCompaniesList, (state, action) => ({\n ...state,\n companyListLoading: true,\n })),\n on(getCompaniesListSuccess, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: action.companyList,\n })),\n on(getCompaniesListFailed, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: [],\n })),\n\n /**\n * add company\n */\n on(addCompany, (state, action) => ({\n ...state,\n companyAddLoading: true,\n })),\n on(addCompanySuccess, (state, action) => ({\n ...state,\n companyAddLoading: false,\n })),\n on(addCompanyFailed, (state, action) => ({\n ...state,\n companyAddLoading: false,\n })),\n\n /**\n * update company\n */\n on(updateCompany, (state, action) => ({\n ...state,\n companyUpdateLoading: true,\n })),\n on(updateCompanySuccess, (state, action) => ({\n ...state,\n companyUpdateLoading: false,\n companyModel: action.companyModel,\n })),\n on(updateCompanyFailed, (state, action) => ({\n ...state,\n companyUpdateLoading: false,\n })),\n\n /**\n * delete company\n */\n on(deleteCompany, (state, action) => ({\n ...state,\n companyDeleteLoading: true,\n })),\n on(deleteCompanySuccess, (state, action) => ({\n ...state,\n companyDeleteLoading: false,\n })),\n on(deleteCompanyFailed, (state, action) => ({\n ...state,\n companyDeleteLoading: false,\n })),\n\n /**\n * get company\n */\n on(getCompany, (state, action) => ({\n ...state,\n companyModelLoading: true,\n })),\n on(getCompanySuccess, (state, action) => ({\n ...state,\n companyModelLoading: false,\n companyModel: action.companyModel,\n })),\n on(getCompanyFailed, (state, action) => ({\n ...state,\n companyModelLoading: false,\n companyModel: null,\n })),\n on(clearCompany, (state, action) => ({\n ...state,\n companyModel: null,\n })),\n\n /**\n * add employee to company\n */\n on(addEmployeeToCompany, (state, action) => ({\n ...state,\n addEmployeeToCompanyLoading: true,\n })),\n on(addEmployeeToCompanySuccess, (state, action) => ({\n ...state,\n addEmployeeToCompanyLoading: false,\n })),\n on(addEmployeeToCompanyFailed, (state, action) => ({\n ...state,\n addEmployeeToCompanyLoading: false,\n })),\n\n /**\n * delete employee from company\n */\n on(deleteEmployeeFromCompany, (state, action) => ({\n ...state,\n deleteEmployeeFromCompanyLoading: true,\n })),\n on(deleteEmployeeFromCompanySuccess, (state, action) => ({\n ...state,\n deleteEmployeeFromCompanyLoading: false,\n })),\n on(deleteEmployeeFromCompanyFailed, (state, action) => ({\n ...state,\n deleteEmployeeFromCompanyLoading: false,\n })),\n\n /**\n * add employee to company\n */\n on(getContractorList, (state, action) => ({\n ...state,\n contractorsLoading: true,\n })),\n on(getContractorListSuccess, (state, action) => ({\n ...state,\n contractorsLoading: false,\n contractors: action.contractors,\n })),\n on(getContractorListFailed, (state, action) => ({\n ...state,\n contractorsLoading: false,\n contractors: [],\n })),\n\n /**\n * add address to company\n */\n on(addAddressToCompany, (state, action) => ({\n ...state,\n addAddressToCompany: true,\n })),\n on(addAddressToCompanySuccess, (state, action) => ({\n ...state,\n addAddressToCompany: false,\n })),\n on(addAddressToCompanyFailed, (state, action) => ({\n ...state,\n addAddressToCompany: false,\n })),\n /**\n * update address in company\n */\n on(updateAddressInCompany, (state, action) => ({\n ...state,\n updateAddressInProgress: true,\n })),\n on(updateAddressInCompanySuccess, (state, action) => ({\n ...state,\n updateAddressInProgress: false,\n })),\n on(updateAddressInCompanyFailed, (state, action) => ({\n ...state,\n updateAddressInProgress: false,\n })),\n\n on(addCompanyWithOwner, (state, action) => ({\n ...state,\n addCompanyWithOwnerInProgress: true,\n })),\n on(addCompanyWithOwnerSuccess, addCompanyWithOwnerFailure, (state, action) => ({\n ...state,\n addCompanyWithOwnerInProgress: false,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromCompanies from '../reducers/companies.reducer';\n\nexport const selectCompaniesState = createFeatureSelector(fromCompanies.companiesFeatureKey);\n\n/**\n * company List\n */\nexport const selectCompanyList = createSelector(selectCompaniesState, companiesState => companiesState.companyList);\nexport const selectCompanyListLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.companyListLoading\n);\n\n/**\n * get company\n */\nexport const selectCompany = createSelector(selectCompaniesState, companiesState => companiesState.companyModel);\nexport const selectCompanyLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.companyModelLoading\n);\nexport const selectUpdateAddressInProgress = createSelector(\n selectCompaniesState,\n companiesState => companiesState.updateAddressInProgress\n);\n\n/**\n * add employee\n */\nexport const selectAddEmployeeToCompanyLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.addEmployeeToCompanyLoading\n);\n\n/**\n * update company\n */\nexport const selectCompanyUpdateLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.companyUpdateLoading\n);\n\n/**\n * delete employee\n */\nexport const selectDeleteEmployeeFromCompanyLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.deleteEmployeeFromCompanyLoading\n);\n\n/**\n * get contractor list\n */\nexport const selectContractorsLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.contractorsLoading\n);\nexport const selectContractors = createSelector(selectCompaniesState, companiesState => companiesState.contractors);\n\n/**\n * get addCompanyWithOwner\n */\nexport const selectAddCompanyWithOwnerLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.addCompanyWithOwnerInProgress\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { DashboardFilter } from '@dashboards/models/dashboard-filter';\n\nexport const setDashboardFilter = createAction('[DashboardFilter] Load DashboardFilters', props());\n","import { createAction, props } from '@ngrx/store';\n\nimport { VacancyLossAttrType } from '@main-application/turnovers/interfaces/vacancy-loss-attr';\nimport { VacancyLostThreshold } from '@main-application/turnovers/interfaces/vacancy-loss-threshold';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { ActiveTurnoversDetailsCombined } from '@shared/interfaces/active-turnover-details';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { DelinquencyDetailsCombined } from '@shared/interfaces/delinquency.interface';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { MyProperties } from '@shared/interfaces/my-properties.interface';\nimport { RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\nimport { RenewalDetailsCombined } from '@shared/interfaces/renewal.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { UnitDetailsByType } from '@shared/interfaces/unit-details-by-type';\nimport { UnitDetails } from '@shared/interfaces/unit-details.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\n\nimport { ActiveTurnoversSummary } from '../models/active-turnover-summary';\nimport { DelinquencySummary } from '../models/delinquency-summary';\nimport { RenewalsSummary } from '../models/renewals-summary';\nimport { UnitsSummary } from '../models/units-summary';\n\nexport const loadTurnoverKanbanProperty = createAction(\n '[Dashboard] load Turnover Kanban Property',\n props<{ propertyId: number }>()\n);\nexport const loadTurnoverKanbanPropertySuccess = createAction(\n '[Dashboard] load Turnover Kanban Property success',\n props<{ tasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadTurnoverKanbanPropertyError = createAction('[Dashboard] load Turnover Kanban Property error');\nexport const resetTurnoverKanbanProperty = createAction('[Dashboard] reset Turnover Kanban Property');\n\nexport const clearTurnoverKanbanPortfolio = createAction('[Dashboard] clear Turnover Kanban portfolio');\nexport const loadTurnoverKanbanPortfolio = createAction(\n '[Dashboard] load Turnover Kanban portfolio',\n props<{ portfolioId: number }>()\n);\nexport const loadTurnoverKanbanPortfolioSuccess = createAction(\n '[Dashboard] load Turnover Kanban portfolio success',\n props<{ tasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadTurnoverKanbanPortfolioError = createAction('[Dashboard] load Turnover Kanban portfolio error');\nexport const resetTurnoverKanbanPortfolio = createAction('[Dashboard] reset Turnover Kanban portfolio');\nexport const kanbanListGenerateSuccess = createAction(\n '[Dashboard] kanban List Generate Success',\n props<{ kanbanListCount: number }>()\n);\n\nexport const loadUserTurnovers = createAction('[Dashboard] load User Turnovers', props<{ userId: number }>());\nexport const loadUserTurnoversSuccess = createAction(\n '[Dashboard] load User Turnovers success',\n props<{ tasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadUserTurnoversError = createAction('[Dashboard] load User Turnovers error');\nexport const resetUserTurnoversError = createAction('[Dashboard] reset User Turnovers error');\n\nexport const loadMyTasks = createAction('[Dashboard] load My Tasks', props<{ portfolioId: number }>());\nexport const loadMyTasksSuccess = createAction(\n '[Dashboard] load My Tasks success',\n props<{ myTasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadMyTasksError = createAction('[Dashboard] load My Tasks error');\nexport const myTasksHeaderData = createAction(\n '[Dashboard] My Tasks header Data',\n props<{\n myTasksTurnoversCount: number;\n myTasksTicketsCount: number;\n staleTurnoversCount: number;\n lateTurnoversCount: number;\n }>()\n);\n\nexport const clearMyTasks = createAction('[Dashboard] clear My Tasks');\n\nexport const loadPropertyKpi = createAction('[Dashboard] Load property kpi', props<{ propertyId: number }>());\nexport const loadPropertyKpiSucceded = createAction('[Dashboard] Load property kpi succeded', props<{ kpi: any }>());\nexport const loadPropertyKpiFailed = createAction('[Dashboard] Load property kpi failed');\n\nexport const loadUnitSummaryByProperty = createAction(\n '[Dashboard] Load unit summary by property',\n props<{ propertyId: number }>()\n);\nexport const loadUnitSummaryByPropertySucceded = createAction(\n '[Dashboard] Load unit summary by property succeded',\n props<{ unitSummary: UnitsSummary }>()\n);\nexport const loadUnitSummaryByPropertyFailed = createAction('[Dashboard] Load unit summary by property failed');\n\nexport const clearUnitSummaryByProperty = createAction('[Dashboard] clear unit summary by property');\n\nexport const loadActiveTurnoversSummary = createAction(\n '[Dashboard] Load active turnovers summary by property',\n props<{ propertyId: number }>()\n);\nexport const loadActiveTurnoversSummarySucceded = createAction(\n '[Dashboard] Load active turnovers summary by property succeded',\n props<{ activeTurnoversSummary: ActiveTurnoversSummary }>()\n);\nexport const loadActiveTurnoversSummaryFailed = createAction(\n '[Dashboard] Load active turnovers summary by property failed'\n);\n\nexport const clearActiveTurnoversSummary = createAction('[Dashboard] clear Active Turnovers Summary');\n\nexport const loadActiveTurnoversDetails = createAction(\n '[Dashboard] Load active turnovers details by property',\n props<{ propertyId: number }>()\n);\nexport const loadActiveTurnoversDetailsSucceded = createAction(\n '[Dashboard] Load active turnovers details by property succeded',\n props<{ activeTurnoversDetails: ActiveTurnoversDetailsCombined }>()\n);\nexport const loadActiveTurnoversDetailsFailed = createAction(\n '[Dashboard] Load active turnovers details by property failed'\n);\n\nexport const loadDelinquencyByUnit = createAction(\n '[Dashboard] Load delinquency by unit',\n props<{ propertyId: number }>()\n);\nexport const loadDelinquencyByUnitSucceded = createAction(\n '[Dashboard] Load delinquency by unit succeded',\n props<{ delinquencyByUnit: DelinquencyDetailsCombined }>()\n);\nexport const loadDelinquencyByUnitFailed = createAction('[Dashboard] Load delinquency by unit failed');\n\nexport const loadDelinquencySummary = createAction(\n '[Dashboard] Load delinquency summary',\n props<{ propertyId: number; delinquencyFilterType: string }>()\n);\nexport const loadDelinquencySummarySucceded = createAction(\n '[Dashboard] Load delinquency succeded',\n props<{ delinquencySummary: DelinquencySummary }>()\n);\nexport const loadDelinquencySummaryFailed = createAction('[Dashboard] Load delinquency failed');\nexport const clearDelinquencySummary = createAction('[Dashboard] clear delinquency summary');\n\nexport const loadRenewalsSummary = createAction('[Dashboard] Load renewals summary', props<{ propertyId: number }>());\nexport const loadRenewalsSummarySucceded = createAction(\n '[Dashboard] Load renewals summary succeded',\n props<{ renewalsSummary: RenewalsSummary }>()\n);\nexport const loadRenewalsSummaryFailed = createAction('[Dashboard] Load renewals summary failed');\nexport const clearRenewalsSummary = createAction('[Dashboard] clear renewals summary');\n\nexport const selectedPropertyId = createAction('[Dashboard] Selected property id', props<{ propertyId: number }>());\n\nexport const loadUnitDetails = createAction(\n '[Dashboard] Load unit details',\n props<{ propertyId: number; dashboardViewType: DashboardViewType }>()\n);\nexport const loadUnitDetailsSuccess = createAction(\n '[Dashboard] Unit details loaded successfully',\n props<{ unitDetails: UnitDetails[] }>()\n);\nexport const loadUnitDetailsFailed = createAction('[Dashboard] Unit details loading failed');\n\nexport const loadUnitDetailsByType = createAction(\n '[Dashboard] Load unit details by type',\n props<{ propertyId: number }>()\n);\nexport const loadUnitDetailsByTypeSuccess = createAction(\n '[Dashboard] Unit details by type loaded successfully',\n props<{ unitDetailsByType: UnitDetailsByType[] }>()\n);\nexport const loadUnitDetailsByTypeFailed = createAction('[Dashboard] Unit details by type loading failed');\n\nexport const loadRenewalsDetails = createAction('[Dashboard] Load renewals details', props<{ propertyId: number }>());\nexport const loadRenewalsDetailsSuccess = createAction(\n '[Dashboard] Renewals details loaded successfully',\n props<{ renewalDetailsCombined: RenewalDetailsCombined }>()\n);\nexport const loadRenewalsDetailsFailed = createAction('[Dashboard] renewals details loading failed');\n\nexport const selectedDashboardViewType = createAction(\n '[Dashboard] Selected dashboard type',\n props<{ dashboardViewType: EnumerationItem }>()\n);\n\nexport const selectedPortfolioId = createAction('[Dashboard] Selected portfolio id', props<{ portfolioId: number }>());\n\nexport const loadMyProperties = createAction('[Dashboard] Load my properties', props<{ portfolioId: number }>());\nexport const loadMyPropertiesSuccess = createAction(\n '[Dashboard] My properties loaded successfully',\n props<{ myProperties: MyProperties[] }>()\n);\nexport const loadMyPropertiesFailed = createAction('[Dashboard] My properties loading failed');\n\nexport const selectedDashboardMode = createAction(\n '[Dashboard] Selected dashboard mode',\n props<{ dashboardMode: DashboardMode }>()\n);\n\nexport const setCustomBreadcrumbs = createAction(\n '[Dashboard] Set custom breadcrumbs',\n props<{ breadcrumbList: BreadcrumbItem[] }>()\n);\n\n/**\n * load Units With Active Turnovers\n */\nexport const loadUnitsWithActiveTurnovers = createAction(\n '[Dashboard] load Units With Active Turnovers',\n props<{ propertyId: number }>()\n);\nexport const loadUnitsWithActiveTurnoversSuccess = createAction(\n '[Dashboard] load Units With Active Turnovers success',\n props<{ unitList: RestUnitSummaryModel[] }>()\n);\nexport const loadUnitsWithActiveTurnoversFailed = createAction('[Dashboard] load Units With Active Turnovers failed');\nexport const resetUnitsWithActiveTurnoversList = createAction('[Dashboard] reset Units With Active Turnovers list');\n/**\n * load Units List\n */\nexport const loadUnitList = createAction('[Dashboard] load Units List', props<{ propertyId: number }>());\nexport const loadUnitListSuccess = createAction(\n '[Dashboard] load Units List success',\n props<{ unitList: RestUnitSummaryModel[] }>()\n);\nexport const loadUnitListFailed = createAction('[Dashboard] load Units List failed');\nexport const resetUnitList = createAction('[Dashboard] reset Unit List');\n\n/**\n * load Unit\n */\nexport const loadUnit = createAction('[Dashboard] load Unit', props<{ unitId: number }>());\nexport const loadUnitSuccess = createAction('[Dashboard] load Unit success', props<{ unit: RestUnitModel }>());\nexport const loadUnitFailed = createAction('[Dashboard] load Unit failed');\nexport const clearUnit = createAction('[Dashboard] load clear unit data');\n\n/**\n * update unit\n */\nexport const updateUnit = createAction('[Dashboard] update unit', props<{ unit: RestUnitModel }>());\nexport const updateUnitSuccess = createAction(\n '[Dashboard] update unit success',\n props<{ updatedUnit: RestUnitModel }>()\n);\nexport const updateUnitFailed = createAction('[Dashboard] update unit failed');\n\nexport const updateUnitDoNotAutoCreateTurns = createAction(\n '[Dashboard] update unit DoNotAutoCreateTurns',\n props<{ unitId: number; doNotAutoCreateTurns: boolean }>()\n);\nexport const updateUnitDoNotAutoCreateTurnsSuccess = createAction(\n '[Dashboard] update unit DoNotAutoCreateTurns success',\n props<{ doNotAutoCreateTurns: boolean }>()\n);\nexport const updateUnitDoNotAutoCreateTurnsFailed = createAction('[Dashboard] update unit DoNotAutoCreateTurns failed');\n\n/**\n * get renewal Strategy For Unit\n */\nexport const getRenewalStrategyForUnit = createAction(\n '[Dashboard] get renewal Strategy For Unit',\n props<{ unitId: number }>()\n);\nexport const getRenewalStrategyForUnitSuccess = createAction(\n '[Dashboard] get renewal Strategy For Unit success',\n props<{ unitTypeRentTarget: RestUnitRenewalTargetModel }>()\n);\nexport const getRenewalStrategyForUnitFailed = createAction('[Dashboard] get renewal Strategy For Unit failed');\n\n/**\n * current portfolio\n */\nexport const setCurrentPortfolio = createAction('[Dashboard] set current portfolio', props<{ portfolioId: number }>());\nexport const resetCurrentPortfolio = createAction('[Dashboard] reset current portfolio');\n\n/**\n * current property\n */\nexport const setCurrentProperty = createAction('[Dashboard] set current portfolio', props<{ propertyId: number }>());\nexport const resetCurrentProperty = createAction('[Dashboard] reset current portfolio');\n\nexport const joinProperties = createAction('[Dashboard] join properties', props<{ state: boolean }>());\nexport const setVacancyLossAttrType = createAction(\n '[Dashboard] setVacancyLossAttrType',\n props<{ attrType: VacancyLossAttrType }>()\n);\n\nexport const setVacancyLossThreshold = createAction(\n '[Dashboard] setVacancyLossThreshold',\n props<{ thresholdType: VacancyLostThreshold }>()\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { KpiWindowType } from '@shared/enums/kpi-window-type';\nimport { PortfolioKpiFilter } from '@shared/interfaces/portfolio-kpi-filter';\n\n/**\n * load portfolio kpi\n */\nexport const loadPortfolioKpisTrend = createAction(\n '[Dashboard] load portfolio kpis trend',\n props<{ portfolioId: number; kpiTypes: PortfolioKpiType[]; dateOffset: KpiWindowType }>()\n);\nexport const loadPortfolioKpis = createAction(\n '[Dashboard] load portfolio kpis',\n props<{ portfolioId: number; kpiTypes: PortfolioKpiType[] }>()\n);\nexport const setPortfolioKpis = createAction('[Dashboard] set portfolio kpis', props<{ kpis: RestPortfolioKpi[] }>());\nexport const setPortfolioKpisTrend = createAction(\n '[Dashboard] set portfolio kpis trend',\n props<{ kpis: RestPortfolioKpi[] }>()\n);\nexport const loadPortfolioKpisFailed = createAction('[Dashboard] load portfolio kpis failed');\n\nexport const loadPortfolioKpisTrendFailed = createAction('[Dashboard] load portfolio kpis trend failed');\n\nexport const setPortfolioKpisFilter = createAction(\n '[Dashboard] set portfolio kpi filter',\n props<{ portfolioKpisFilter: PortfolioKpiFilter }>()\n);\n\nexport const clearPortfolioKpis = createAction('[Dashboard] clear portfolio kpis');\n\nexport const loadPortfolioKpiTrendLines = createAction(\n '[Dashboard] load portfolio kpi trend lines',\n props<{ portfolioId: number; trendDays: number[]; kpiTypes: PortfolioKpiType[] }>()\n);\n\nexport const setPortfolioKpiTrendLines = createAction(\n '[Dashboard] set portfolio kpi trend lines',\n props<{ kpis: RestPortfolioKpi[] }>()\n);\n\nexport const clearPortfolioKpiTrendLines = createAction('[Dashboard] clear portfolio kpi trends');\n\nexport const setChartSelectorValue = createAction(\n '[Dashboard] set chart selector value',\n props<{ selectorId: string; value: number }>()\n);\n\nexport const setChartSettingsValue = createAction(\n '[Dashboard] set chart settings value',\n props<{ chartId: string; value: any }>()\n);\n","import { ChangeDetectorRef, Directive } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\n@Directive()\nexport abstract class DashboardsAbstract extends ComponentAbstract {\n emptyDashboard = true;\n\n selectSelectedPropertyId$: Observable;\n selectSelectedPortfolioId$: Observable;\n enumerations$: Observable;\n\n dashboardMode: DashboardMode;\n dashboardMode$: Observable;\n permissionList: PermissionLevelType[];\n permissionsList$: Observable;\n\n protected constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n get WorkflowStep(): typeof WorkflowStepEnumType {\n return WorkflowStepEnumType;\n }\n\n get DashboardViewType(): typeof DashboardViewType {\n return DashboardViewType;\n }\n\n get DashboardMode(): typeof DashboardMode {\n return DashboardMode;\n }\n\n get TicketAttachmentType(): typeof TicketAttachmentType {\n return TicketAttachmentType;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimerService {\n constructor(private restApiService: RestapiService) {}\n\n reloadTimer(): Observable {\n return this.restApiService.associate(`Timer/refresh`, null);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, of } from 'rxjs';\nimport { catchError, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\n\nimport { KpiService } from '@app/services/kpi.service';\nimport { RenewalsService } from '@app/services/renewals.service';\nimport { TimerService } from '@app/services/timer.service';\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { ActiveTurnoversDetailsCombined } from '@shared/interfaces/active-turnover-details';\nimport { DelinquencyDetailsCombined } from '@shared/interfaces/delinquency.interface';\nimport { PropertyKpi } from '@shared/interfaces/kpi';\nimport { MyProperties } from '@shared/interfaces/my-properties.interface';\nimport { RenewalDetailsCombined } from '@shared/interfaces/renewal.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { UnitDetailsByType } from '@shared/interfaces/unit-details-by-type';\nimport { UnitDetails } from '@shared/interfaces/unit-details.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { RestapiService } from 'src/app/services/restapi.service';\n\nimport {\n getRenewalStrategyForUnit,\n getRenewalStrategyForUnitFailed,\n getRenewalStrategyForUnitSuccess,\n loadActiveTurnoversDetails,\n loadActiveTurnoversDetailsFailed,\n loadActiveTurnoversDetailsSucceded,\n loadActiveTurnoversSummary,\n loadActiveTurnoversSummaryFailed,\n loadActiveTurnoversSummarySucceded,\n loadDelinquencyByUnit,\n loadDelinquencyByUnitFailed,\n loadDelinquencyByUnitSucceded,\n loadDelinquencySummary,\n loadDelinquencySummaryFailed,\n loadDelinquencySummarySucceded,\n loadMyProperties,\n loadMyPropertiesFailed,\n loadMyPropertiesSuccess,\n loadMyTasks,\n loadMyTasksError,\n loadMyTasksSuccess,\n loadPropertyKpi,\n loadPropertyKpiFailed,\n loadPropertyKpiSucceded,\n loadRenewalsDetails,\n loadRenewalsDetailsFailed,\n loadRenewalsDetailsSuccess,\n loadRenewalsSummary,\n loadRenewalsSummaryFailed,\n loadRenewalsSummarySucceded,\n loadTurnoverKanbanPortfolio,\n loadTurnoverKanbanPortfolioError,\n loadTurnoverKanbanPortfolioSuccess,\n loadTurnoverKanbanProperty,\n loadTurnoverKanbanPropertyError,\n loadTurnoverKanbanPropertySuccess,\n loadUnit,\n loadUnitDetails,\n loadUnitDetailsByType,\n loadUnitDetailsByTypeFailed,\n loadUnitDetailsByTypeSuccess,\n loadUnitDetailsFailed,\n loadUnitDetailsSuccess,\n loadUnitFailed,\n loadUnitList,\n loadUnitListFailed,\n loadUnitListSuccess,\n loadUnitSuccess,\n loadUnitSummaryByProperty,\n loadUnitSummaryByPropertySucceded,\n loadUnitsWithActiveTurnovers,\n loadUnitsWithActiveTurnoversFailed,\n loadUnitsWithActiveTurnoversSuccess,\n updateUnit,\n updateUnitDoNotAutoCreateTurns,\n updateUnitDoNotAutoCreateTurnsFailed,\n updateUnitDoNotAutoCreateTurnsSuccess,\n updateUnitFailed,\n updateUnitSuccess,\n} from '../actions/dashboard.actions';\nimport { ActiveTurnoversSummary } from '../models/active-turnover-summary';\nimport { DelinquencySummary } from '../models/delinquency-summary';\nimport { RenewalsSummary } from '../models/renewals-summary';\nimport { UnitsSummary } from '../models/units-summary';\nimport { selectCurrentDashboardViewTypeSimpleText } from '../selectors/dashboards.selectors';\n\n@Injectable()\nexport class DashboardEffects {\n readonly routePath = 'properties/dashboards/';\n\n loadTurnoverKanbanProperty$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadTurnoverKanbanProperty),\n switchMap(action =>\n this.turnoversService.getPropertyTurnovers(action.propertyId).pipe(\n map(taskList => loadTurnoverKanbanPropertySuccess({ tasks: taskList || [] })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.T01RetrievingTasks);\n return of(loadTurnoverKanbanPropertyError());\n })\n )\n )\n )\n );\n\n loadTurnoverKanbanPortfolio$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadTurnoverKanbanPortfolio),\n switchMap(action =>\n this.timerService.reloadTimer().pipe(\n switchMap(() =>\n this.turnoversService.getPortfolioTurnovers(action.portfolioId).pipe(\n map(tasks => loadTurnoverKanbanPortfolioSuccess({ tasks: tasks || [] })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.T02RetrievingTasks);\n return of(loadTurnoverKanbanPortfolioError());\n })\n )\n )\n )\n )\n )\n );\n\n loadMyTasks$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadMyTasks),\n switchMap(action =>\n combineLatest([this.timerService.reloadTimer(), this.turnoversService.getAllTasks(action.portfolioId)]).pipe(\n map(([, tasks]) => loadMyTasksSuccess({ myTasks: tasks || [] })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingMyTasks);\n return of(loadMyTasksError());\n })\n )\n )\n )\n );\n\n loadPropertyKpi$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPropertyKpi),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(`${this.routePath}PropertyKPI/${action.propertyId}/${dashboardEnumValue}`)\n .pipe(\n map(kpi => loadPropertyKpiSucceded({ kpi })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.T03RetrievingTasks);\n return of(loadPropertyKpiFailed());\n })\n )\n )\n )\n );\n\n loadUnitSummaryByProperty$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUnitSummaryByProperty),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(`${this.routePath}UnitSummaryByProperty/${action.propertyId}/${dashboardEnumValue}`)\n .pipe(\n map(unitSummary => loadUnitSummaryByPropertySucceded({ unitSummary })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.T04RetrievingTasks);\n\n return of(loadDelinquencySummaryFailed());\n })\n )\n )\n )\n );\n\n loadActiveTurnoversSummary$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadActiveTurnoversSummary),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(\n `${this.routePath}ActiveTurnoversSummary/${action.propertyId}/${dashboardEnumValue}`\n )\n .pipe(\n map(result => loadActiveTurnoversSummarySucceded({ activeTurnoversSummary: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingTurnoverSummary);\n return of(loadActiveTurnoversSummaryFailed());\n })\n )\n )\n )\n );\n\n loadActiveTurnoversDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadActiveTurnoversDetails),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(\n `${this.routePath}ActiveTurnoversDetails/${action.propertyId}/${dashboardEnumValue}`\n )\n .pipe(\n map(result => loadActiveTurnoversDetailsSucceded({ activeTurnoversDetails: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingTurnoverDetails);\n return of(loadActiveTurnoversDetailsFailed());\n })\n )\n )\n )\n );\n\n loadDelinquencySummary$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadDelinquencySummary),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(\n `${this.routePath}DelinquencySummary/${action.propertyId}/${dashboardEnumValue}/${action.delinquencyFilterType}`\n )\n .pipe(\n map(result => loadDelinquencySummarySucceded({ delinquencySummary: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingDelinquencySummary);\n return of(loadDelinquencySummaryFailed());\n })\n )\n )\n )\n );\n\n loadDelinquencyByUnit$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadDelinquencyByUnit),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(\n `${this.routePath}DelinquencyDetails/${action.propertyId}/${dashboardEnumValue}/MoreThanTwentyFive`\n ) // TODO verify this option - MoreThanTwentyFive\n .pipe(\n map(result => loadDelinquencyByUnitSucceded({ delinquencyByUnit: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingDelinquencyDetails);\n return of(loadDelinquencyByUnitFailed());\n })\n )\n )\n )\n );\n\n loadRenewalsSummary$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadRenewalsSummary),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(`${this.routePath}RenewalsSummary/${action.propertyId}/${dashboardEnumValue}`)\n .pipe(\n map(renewalsSummary => loadRenewalsSummarySucceded({ renewalsSummary })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingRenewalsSummary);\n return of(loadRenewalsSummaryFailed());\n })\n )\n )\n )\n );\n\n loadUnitDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUnitDetails),\n switchMap(action =>\n this.restApiService\n .getData(`${this.routePath}UnitDetails/${action.propertyId}/${action.dashboardViewType}`)\n .pipe(\n map(result => loadUnitDetailsSuccess({ unitDetails: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingUnitDetails);\n return of(loadUnitDetailsFailed());\n })\n )\n )\n )\n );\n\n loadUnitDetailsByType$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUnitDetailsByType),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(`${this.routePath}UnitDetailsByType/${action.propertyId}/${dashboardEnumValue}`)\n .pipe(\n map(result => loadUnitDetailsByTypeSuccess({ unitDetailsByType: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingUnitDetailsByProperty);\n return of(loadUnitDetailsByTypeFailed());\n })\n )\n )\n )\n );\n\n loadRenewalsDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadRenewalsDetails),\n withLatestFrom(this.store.select(selectCurrentDashboardViewTypeSimpleText)),\n switchMap(([action, dashboardEnumValue]) =>\n this.restApiService\n .getData(\n `${this.routePath}RenewalsDetails/${action.propertyId}/${dashboardEnumValue}`\n )\n .pipe(\n map(renewalDetailsCombined => loadRenewalsDetailsSuccess({ renewalDetailsCombined })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingRenewalDetails);\n return of(loadRenewalsDetailsFailed());\n })\n )\n )\n )\n );\n\n loadMyProperties$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadMyProperties),\n switchMap(action =>\n this.restApiService.getData(`${this.routePath}MyProperties/${action.portfolioId}`).pipe(\n map(result => loadMyPropertiesSuccess({ myProperties: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingProperties);\n return of(loadMyPropertiesFailed());\n })\n )\n )\n )\n );\n\n loadUnitsWithActiveTurnovers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUnitsWithActiveTurnovers),\n switchMap(action =>\n this.restApiService\n .getData(`Units/property/${action.propertyId}/WithActiveTurnovers`)\n .pipe(\n map(unitList => loadUnitsWithActiveTurnoversSuccess({ unitList })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UL01LoadingUnitList);\n return of(loadUnitsWithActiveTurnoversFailed());\n })\n )\n )\n )\n );\n\n loadUnitList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUnitList),\n switchMap(action =>\n this.restApiService\n .getData(`Units/property/${action.propertyId}/WithNoActiveTurnovers`)\n .pipe(\n map(unitList => loadUnitListSuccess({ unitList })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UL02LoadingUnitList);\n return of(loadUnitListFailed());\n })\n )\n )\n )\n );\n\n loadUnit$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUnit),\n switchMap(action =>\n this.restApiService.getData(`Units/${action.unitId}`).pipe(\n map(unit => loadUnitSuccess({ unit })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingUnit);\n return of(loadUnitFailed());\n })\n )\n )\n )\n );\n\n updateUnit$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateUnit),\n mergeMap(action =>\n this.restApiService.update(`Units/${action.unit.id}`, action.unit).pipe(\n map(updatedUnit => updateUnitSuccess({ updatedUnit })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingUnit);\n return of(updateUnitFailed());\n })\n )\n )\n )\n );\n\n updateUnitDoNotAutoCreateTurns$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateUnitDoNotAutoCreateTurns),\n mergeMap(action =>\n this.restApiService\n .post(`Units/${action.unitId}/SetDoNotAutoCreateTurns`, {\n doNotAutoCreateTurns: action.doNotAutoCreateTurns,\n })\n .pipe(\n map(() => updateUnitDoNotAutoCreateTurnsSuccess({ doNotAutoCreateTurns: action.doNotAutoCreateTurns })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingUnit);\n return of(updateUnitDoNotAutoCreateTurnsFailed());\n })\n )\n )\n )\n );\n\n getRenewalStrategyForUnit$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getRenewalStrategyForUnit),\n switchMap(action =>\n this.renewalsService.renewalTargetForUnitId(action.unitId).pipe(\n map(unitTypeRentTarget => getRenewalStrategyForUnitSuccess({ unitTypeRentTarget })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingRenealStrategy);\n return of(getRenewalStrategyForUnitFailed());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private restApiService: RestapiService,\n private store: Store<{}>,\n private snackbarService: SnackbarService,\n private turnoversService: TurnoversService,\n private renewalsService: RenewalsService,\n private timerService: TimerService,\n private kpiService: KpiService\n ) {}\n}\n","export enum ChartTypes {\n PIE = 'pie',\n BAR = 'bar',\n DOUGHNUT = 'doughnut',\n LINE = 'line',\n}\n","export enum PortfolioKpiType {\n AvgTurnoverTime = 1,\n AvgOpenTurnoverNow = 93,\n VacantCount = 2,\n OccupancyPercent = 3,\n Expirations30 = 4,\n Expirations60 = 5,\n Expirations90 = 6,\n MoveOuts30 = 7,\n MoveOuts60 = 8,\n MoveOuts90 = 9,\n ApplicationsTotal30 = 10,\n Preleased30 = 11,\n EstOccupancyPercent30 = 12,\n EstOccupancyPercent60 = 13,\n EstOccupancyPercent90 = 14,\n EstOccupancyPercentSmart30 = 15,\n EstOccupancyPercentSmart60 = 16,\n EstOccupancyPercentSmart90 = 17,\n ExpirationsSmart30 = 18,\n ExpirationsSmart60 = 19,\n ExpirationsSmart90 = 20,\n MoveOutTurnovers = 21,\n Notices = 22,\n Bids = 23,\n MakeReady = 24,\n Reno = 25,\n Approval = 27,\n Punch = 26,\n TotalTurnovers = 28,\n Marketing = 29,\n Leasup = 30,\n MoveIn = 31,\n UnleasedUnits = 32,\n UnleasedUnitsNow = 94,\n NewApplications30 = 33,\n CancelledApplications30 = 34,\n PendingApplications30 = 35,\n DeniedApplications30 = 36,\n ApprovedApplications30 = 37,\n ConvertingApplications30 = 38,\n ConvertedApplications30 = 39,\n AvgMoveOutNow = 85,\n AvgMoveOut30 = 40,\n AvgBidNow = 86,\n AvgBid30 = 41,\n AvgMakeReadyNow = 87,\n AvgMakeReady30 = 42,\n AvgRenoNow = 88,\n AvgReno30 = 43,\n AvgLeasupNow = 89,\n AvgLeasup30 = 44,\n AvgApprovalPunchNow = 91,\n AvgApprovalPunch30 = 45,\n AvgMoveOut60 = 46,\n AvgBid60 = 47,\n AvgMakeReady60 = 48,\n AvgReno60 = 49,\n AvgLeasup60 = 50,\n AvgApprovalPunch60 = 51,\n AvgMoveOut90 = 52,\n AvgBid90 = 53,\n AvgMakeReady90 = 54,\n AvgReno90 = 55,\n AvgLeasup90 = 56,\n AvgApprovalPunch90 = 57,\n Preleased60 = 58,\n Preleased90 = 59,\n ApplicationsTotal60 = 60,\n NewApplications60 = 61,\n CancelledApplications60 = 62,\n PendingApplications60 = 63,\n DeniedApplications60 = 64,\n ApprovedApplications60 = 65,\n ConvertingApplications60 = 66,\n ConvertedApplications60 = 67,\n ApplicationsTotal90 = 68,\n NewApplications90 = 69,\n CancelledApplications90 = 70,\n PendingApplications90 = 71,\n DeniedApplications90 = 72,\n ApprovedApplications90 = 73,\n ConvertingApplications90 = 74,\n ConvertedApplications90 = 75,\n AverageTurnTime60 = 76,\n AverageTurnTime90 = 77,\n Leasing30 = 78,\n Leasing60 = 79,\n Leasing90 = 80,\n VacancyLossMedium = 81,\n VacancyLossMediumActiveTurns = 82,\n VacancyLossHigh = 83,\n VacancyLossHighActiveTurns = 84,\n VacancyLossNone = 131,\n VacancyLossNoneActiveTurns = 132,\n AvgPunch30 = 95,\n AvgPunch60 = 96,\n AvgPunch90 = 97,\n AvgApproval30 = 98,\n AvgApproval60 = 99,\n AvgApproval90 = 100,\n AvgMoveIn30 = 101,\n AvgMoveIn60 = 102,\n AvgMoveIn90 = 103,\n AvgPunchNow = 90,\n AvgApprovalNow = 91,\n AvgMoveInNow = 92,\n}\n\nexport interface RestPortfolioKpi {\n calculationDate: string;\n dateUpdated: string;\n kpiType: PortfolioKpiType;\n portfolioId: number;\n propertyId: number;\n unitsCount: number;\n value: number;\n}\n","import { MetaReducer, createReducer, on } from '@ngrx/store';\n\nimport { setDashboardFilter } from '@dashboards/actions/dashboard-filter.actions';\nimport { hydrationMetaReducer, pathInitialValue } from '@shared/reducers/hydration-meta.reducer';\n\nexport const dashboardFilterFeatureKey = 'dashboardFilter';\n\nexport interface DashboardFilterState {\n assignee?: number;\n}\n\nexport const initialState: DashboardFilterState = pathInitialValue(\n {\n assignee: null,\n },\n dashboardFilterFeatureKey\n);\n\nexport const metaDashboardFilterReducers: Array> = [\n hydrationMetaReducer(dashboardFilterFeatureKey),\n];\n\nexport const reducer = createReducer(\n initialState,\n on(setDashboardFilter, (state, action) => ({ ...state, ...action }))\n);\n","import { ActionReducer, MetaReducer, createReducer, on } from '@ngrx/store';\n\nimport { PortfolioKpiType } from '@dashboards/models/portfolio-kpi';\nimport { VacancyLossAttrType } from '@main-application/turnovers/interfaces/vacancy-loss-attr';\nimport { VacancyLostThreshold } from '@main-application/turnovers/interfaces/vacancy-loss-threshold';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { ActiveTurnoversDetailsCombined } from '@shared/interfaces/active-turnover-details';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { DelinquencyDetailsCombined } from '@shared/interfaces/delinquency.interface';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { PropertyKpi } from '@shared/interfaces/kpi';\nimport { MyProperties } from '@shared/interfaces/my-properties.interface';\nimport { RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\nimport { RenewalDetailsCombined } from '@shared/interfaces/renewal.interface';\nimport { RestPortfolioModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { UnitDetailsByType } from '@shared/interfaces/unit-details-by-type';\nimport { UnitDetails } from '@shared/interfaces/unit-details.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { pathInitialValue } from '@shared/reducers/hydration-meta.reducer';\n\nimport {\n clearActiveTurnoversSummary,\n clearDelinquencySummary,\n clearMyTasks,\n clearRenewalsSummary,\n clearTurnoverKanbanPortfolio,\n clearUnit,\n clearUnitSummaryByProperty,\n getRenewalStrategyForUnit,\n getRenewalStrategyForUnitFailed,\n getRenewalStrategyForUnitSuccess,\n joinProperties,\n kanbanListGenerateSuccess,\n loadActiveTurnoversDetails,\n loadActiveTurnoversDetailsFailed,\n loadActiveTurnoversDetailsSucceded,\n loadActiveTurnoversSummary,\n loadActiveTurnoversSummaryFailed,\n loadActiveTurnoversSummarySucceded,\n loadDelinquencyByUnit,\n loadDelinquencyByUnitFailed,\n loadDelinquencyByUnitSucceded,\n loadDelinquencySummary,\n loadDelinquencySummaryFailed,\n loadDelinquencySummarySucceded,\n loadMyProperties,\n loadMyPropertiesFailed,\n loadMyPropertiesSuccess,\n loadMyTasks,\n loadMyTasksError,\n loadMyTasksSuccess,\n loadPropertyKpi,\n loadPropertyKpiFailed,\n loadPropertyKpiSucceded,\n loadRenewalsDetails,\n loadRenewalsDetailsFailed,\n loadRenewalsDetailsSuccess,\n loadRenewalsSummary,\n loadRenewalsSummaryFailed,\n loadRenewalsSummarySucceded,\n loadTurnoverKanbanPortfolio,\n loadTurnoverKanbanPortfolioError,\n loadTurnoverKanbanPortfolioSuccess,\n loadTurnoverKanbanProperty,\n loadTurnoverKanbanPropertyError,\n loadTurnoverKanbanPropertySuccess,\n loadUnit,\n loadUnitDetails,\n loadUnitDetailsByType,\n loadUnitDetailsByTypeFailed,\n loadUnitDetailsByTypeSuccess,\n loadUnitDetailsFailed,\n loadUnitDetailsSuccess,\n loadUnitFailed,\n loadUnitList,\n loadUnitListFailed,\n loadUnitListSuccess,\n loadUnitSuccess,\n loadUnitSummaryByProperty,\n loadUnitSummaryByPropertyFailed,\n loadUnitSummaryByPropertySucceded,\n loadUnitsWithActiveTurnovers,\n loadUnitsWithActiveTurnoversFailed,\n loadUnitsWithActiveTurnoversSuccess,\n loadUserTurnovers,\n loadUserTurnoversError,\n loadUserTurnoversSuccess,\n myTasksHeaderData,\n resetCurrentPortfolio,\n resetCurrentProperty,\n resetTurnoverKanbanPortfolio,\n resetTurnoverKanbanProperty,\n resetUnitList,\n resetUnitsWithActiveTurnoversList,\n resetUserTurnoversError,\n selectedDashboardMode,\n selectedDashboardViewType,\n selectedPortfolioId,\n selectedPropertyId,\n setCurrentPortfolio,\n setCurrentProperty,\n setCustomBreadcrumbs,\n setVacancyLossAttrType,\n setVacancyLossThreshold,\n updateUnit,\n updateUnitDoNotAutoCreateTurns,\n updateUnitDoNotAutoCreateTurnsFailed,\n updateUnitDoNotAutoCreateTurnsSuccess,\n updateUnitFailed,\n updateUnitSuccess,\n} from '../actions/dashboard.actions';\nimport { ActiveTurnoversSummary } from '../models/active-turnover-summary';\nimport { DelinquencySummary } from '../models/delinquency-summary';\nimport { RenewalsSummary } from '../models/renewals-summary';\nimport { UnitsSummary } from '../models/units-summary';\n\nexport const dashboardsFeatureKey = 'main-dashboard';\n\nconst UPDATE_STORAGE_ACTIONS: string[] = [\n selectedPortfolioId.type,\n selectedPropertyId.type,\n joinProperties.type,\n setVacancyLossAttrType.type,\n setVacancyLossThreshold.type,\n];\n\nexport interface DashboardsState {\n propertyUserTaskList: RestTurnoverTaskModel[];\n propertyUserTaskListLoading: boolean;\n portfolioUserTaskList: RestTurnoverTaskModel[];\n portfolioUserTaskListLoading: boolean;\n userTaskList: RestTurnoverTaskModel[];\n userTaskListLoading: boolean;\n myTasks: RestTurnoverTaskModel[];\n myTasksLoading: boolean;\n myTasksTicketsCount: number;\n myTasksTurnoversCount: number;\n staleTurnoversCount: number;\n lateTurnoversCount: number;\n kanbanListLoading: boolean;\n propertyKpi: PropertyKpi;\n propertyKpiLoading: boolean;\n kanbanListCount: number;\n unitsSummaryByProperty: UnitsSummary;\n unitsSummaryByPropertyLoading: boolean;\n activeTurnoversSummary: ActiveTurnoversSummary;\n activeTurnoversSummaryLoading: boolean;\n activeTurnoversDetails: ActiveTurnoversDetailsCombined;\n activeTurnoversDetailsLoading: boolean;\n delinquencyByUnit: DelinquencyDetailsCombined;\n delinquencyByUnitLoading: boolean;\n delinquencySummary: DelinquencySummary;\n delinquencySummaryLoading: boolean;\n renewalsSummary: RenewalsSummary;\n renewalsSummaryLoading: boolean;\n selectedPropertyId: number;\n selectedPortfolioId: number;\n unitDetailsLoading: boolean;\n unitDetails: UnitDetails[];\n unitDetailsByTypeLoading: boolean;\n unitDetailsByType: UnitDetailsByType[];\n renewalDetailsCombinedLoading: boolean;\n renewalDetailsCombined: RenewalDetailsCombined;\n selectedDashboardViewType: EnumerationItem;\n portfolioItemsLoading: boolean;\n portfolioItems: RestPortfolioModel[];\n myPropertiesLoading: boolean;\n myProperties: MyProperties[];\n dashboardMode: DashboardMode;\n breadcrumbList: BreadcrumbItem[];\n unitListWithActiveTurnover: RestUnitSummaryModel[];\n unitListWithActiveTurnoverLoading: boolean;\n unitList: RestUnitSummaryModel[];\n unitListLoading: boolean;\n unit: RestUnitModel;\n unitLoading: boolean;\n unitDoNotAutoCreateTurnsLoading: boolean;\n renewalStrategyForUnit: RestUnitRenewalTargetModel;\n renewalStrategyForUnitLoading: boolean;\n currentPropertyId: number;\n currentPortfolioId: number;\n joinProperties: boolean;\n selectedVacancyLossAttr: VacancyLossAttrType;\n selectedVacancyLossThreshold: VacancyLostThreshold;\n selectedVacancyLossThresholdKpiType: PortfolioKpiType;\n selectedVacancyLossThresholdKpiTypePerTurn: PortfolioKpiType;\n}\n\nexport const initialState: DashboardsState = pathInitialValue(\n {\n activeTurnoversDetails: null,\n activeTurnoversDetailsLoading: false,\n activeTurnoversSummary: null,\n activeTurnoversSummaryLoading: false,\n breadcrumbList: [],\n currentPortfolioId: null,\n currentPropertyId: null,\n dashboardMode: null,\n delinquencyByUnit: null,\n delinquencyByUnitLoading: false,\n delinquencySummary: null,\n delinquencySummaryLoading: false,\n myProperties: [],\n myPropertiesLoading: false,\n portfolioItems: [],\n portfolioItemsLoading: false,\n portfolioUserTaskList: [],\n portfolioUserTaskListLoading: false,\n kanbanListLoading: false,\n kanbanListCount: null,\n propertyKpi: null,\n propertyKpiLoading: false,\n propertyUserTaskList: [],\n propertyUserTaskListLoading: false,\n userTaskList: [],\n userTaskListLoading: false,\n myTasks: [],\n myTasksLoading: false,\n myTasksTicketsCount: null,\n myTasksTurnoversCount: null,\n staleTurnoversCount: null,\n lateTurnoversCount: null,\n renewalDetailsCombined: null,\n renewalDetailsCombinedLoading: false,\n renewalStrategyForUnit: null,\n renewalStrategyForUnitLoading: false,\n renewalsSummary: null,\n renewalsSummaryLoading: false,\n selectedDashboardViewType: null,\n selectedPortfolioId: null,\n selectedPropertyId: undefined,\n unit: null,\n unitDetails: [],\n unitDetailsByType: [],\n unitDetailsByTypeLoading: false,\n unitDetailsLoading: false,\n unitList: [],\n unitListLoading: false,\n unitListWithActiveTurnover: [],\n unitListWithActiveTurnoverLoading: false,\n unitLoading: false,\n unitDoNotAutoCreateTurnsLoading: false,\n unitsSummaryByProperty: null,\n unitsSummaryByPropertyLoading: false,\n joinProperties: false,\n selectedVacancyLossAttr: VacancyLossAttrType.Gross,\n selectedVacancyLossThreshold: VacancyLostThreshold.None,\n selectedVacancyLossThresholdKpiType: PortfolioKpiType.VacancyLossNone,\n selectedVacancyLossThresholdKpiTypePerTurn: PortfolioKpiType.VacancyLossNoneActiveTurns,\n },\n dashboardsFeatureKey\n);\n\nconst hydrationMetaReducer = (reducer: ActionReducer): ActionReducer => {\n return (state, action) => {\n const nextState = reducer(state, action);\n if (UPDATE_STORAGE_ACTIONS.includes(action.type)) {\n localStorage.setItem(\n dashboardsFeatureKey,\n JSON.stringify({\n selectedPortfolioId: nextState.selectedPortfolioId,\n selectedPropertyId: nextState.selectedPropertyId,\n joinProperties: nextState.joinProperties,\n selectedVacancyLossAttr: nextState.selectedVacancyLossAttr,\n selectedVacancyLossThreshold: nextState.selectedVacancyLossThreshold,\n selectedVacancyLossThresholdKpiType: nextState.selectedVacancyLossThresholdKpiType,\n selectedVacancyLossThresholdKpiTypePerTurn: nextState.selectedVacancyLossThresholdKpiTypePerTurn,\n })\n );\n }\n return nextState;\n };\n};\n\nexport const metaDashboardReducers: Array> = [hydrationMetaReducer];\n\nexport const reducer = createReducer(\n initialState,\n on(loadTurnoverKanbanProperty, (state, action) => ({\n ...state,\n propertyUserTaskListLoading: true,\n })),\n on(loadTurnoverKanbanPropertySuccess, (state, action) => ({\n ...state,\n propertyUserTaskList: action.tasks,\n propertyUserTaskListLoading: false,\n })),\n on(loadTurnoverKanbanPropertyError, (state, action) => ({\n ...state,\n propertyUserTaskList: [],\n propertyUserTaskListLoading: false,\n })),\n on(resetTurnoverKanbanProperty, (state, action) => ({\n ...state,\n propertyUserTaskList: [],\n })),\n on(loadUserTurnovers, (state, action) => ({\n ...state,\n userTaskListLoading: true,\n })),\n on(loadUserTurnoversSuccess, (state, action) => ({\n ...state,\n userTaskList: action.tasks,\n userTaskListLoading: false,\n })),\n on(loadUserTurnoversError, (state, action) => ({\n ...state,\n userTaskList: [],\n userTaskListLoading: false,\n })),\n on(resetUserTurnoversError, (state, action) => ({\n ...state,\n userTaskList: [],\n })),\n on(loadMyTasks, (state, action) => ({\n ...state,\n myTasksLoading: true,\n })),\n on(loadMyTasksSuccess, (state, action) => ({\n ...state,\n myTasks: action.myTasks,\n myTasksLoading: false,\n })),\n on(loadMyTasksError, (state, action) => ({\n ...state,\n myTasks: [],\n myTasksLoading: false,\n })),\n on(clearMyTasks, (state, action) => ({\n ...state,\n myTasks: [],\n })),\n on(myTasksHeaderData, (state, action) => ({\n ...state,\n myTasksTicketsCount: action.myTasksTicketsCount,\n myTasksTurnoversCount: action.myTasksTurnoversCount,\n staleTurnoversCount: action.staleTurnoversCount,\n lateTurnoversCount: action.lateTurnoversCount,\n })),\n on(clearTurnoverKanbanPortfolio, (state, action) => ({\n ...state,\n portfolioUserTaskList: null,\n })),\n on(loadTurnoverKanbanPortfolio, (state, action) => ({\n ...state,\n portfolioUserTaskListLoading: true,\n kanbanListLoading: true,\n })),\n on(loadTurnoverKanbanPortfolioSuccess, (state, action) => ({\n ...state,\n portfolioUserTaskList: action.tasks,\n portfolioUserTaskListLoading: false,\n })),\n on(loadTurnoverKanbanPortfolioError, (state, action) => ({\n ...state,\n portfolioUserTaskList: [],\n portfolioUserTaskListLoading: false,\n kanbanListLoading: false,\n kanbanListCount: 0,\n })),\n on(resetTurnoverKanbanPortfolio, (state, action) => ({\n ...state,\n portfolioUserTaskList: [],\n })),\n on(kanbanListGenerateSuccess, (state, action) => ({\n ...state,\n kanbanListLoading: false,\n kanbanListCount: action.kanbanListCount,\n })),\n\n on(loadPropertyKpi, (state, action) => ({ ...state, propertyKpiLoading: true })),\n on(loadPropertyKpiSucceded, (state, action) => ({ ...state, propertyKpiLoading: false, propertyKpi: action.kpi })),\n on(loadPropertyKpiFailed, (state, action) => ({ ...state, propertyKpiLoading: false, propertyKpi: null })),\n on(loadUnitSummaryByProperty, (state, action) => ({ ...state, unitsSummaryByPropertyLoading: true })),\n on(loadUnitSummaryByPropertySucceded, (state, action) => ({\n ...state,\n unitsSummaryByPropertyLoading: false,\n unitsSummaryByProperty: action.unitSummary,\n })),\n on(loadUnitSummaryByPropertyFailed, (state, action) => ({\n ...state,\n unitsSummaryByPropertyLoading: false,\n unitsSummaryByProperty: null,\n })),\n on(clearUnitSummaryByProperty, (state, action) => ({\n ...state,\n unitsSummaryByProperty: null,\n })),\n on(loadActiveTurnoversSummary, (state, action) => ({ ...state, activeTurnoversSummaryLoading: true })),\n on(loadActiveTurnoversSummarySucceded, (state, action) => ({\n ...state,\n activeTurnoversSummaryLoading: false,\n activeTurnoversSummary: action.activeTurnoversSummary,\n })),\n on(loadActiveTurnoversSummaryFailed, (state, action) => ({\n ...state,\n activeTurnoversSummaryLoading: false,\n activeTurnoversSummary: null,\n })),\n on(clearActiveTurnoversSummary, (state, action) => ({\n ...state,\n activeTurnoversSummary: null,\n })),\n on(loadActiveTurnoversDetails, (state, action) => ({ ...state, activeTurnoversDetailsLoading: true })),\n on(loadActiveTurnoversDetailsSucceded, (state, action) => ({\n ...state,\n activeTurnoversDetailsLoading: false,\n activeTurnoversDetails: action.activeTurnoversDetails,\n })),\n on(loadActiveTurnoversDetailsFailed, (state, action) => ({\n ...state,\n activeTurnoversDetailsLoading: false,\n activeTurnoversDetails: null,\n })),\n on(loadDelinquencySummary, (state, action) => ({ ...state, delinquencySummaryLoading: true })),\n on(loadDelinquencySummarySucceded, (state, action) => ({\n ...state,\n delinquencySummary: action.delinquencySummary,\n delinquencySummaryLoading: false,\n })),\n on(loadDelinquencySummaryFailed, (state, action) => ({\n ...state,\n delinquencySummaryLoading: false,\n delinquencySummary: null,\n })),\n on(clearDelinquencySummary, (state, action) => ({ ...state, delinquencySummary: null })),\n\n on(loadDelinquencyByUnit, (state, action) => ({ ...state, delinquencyByUnitLoading: true })),\n on(loadDelinquencyByUnitSucceded, (state, action) => ({\n ...state,\n delinquencyByUnitLoading: false,\n delinquencyByUnit: action.delinquencyByUnit,\n })),\n on(loadDelinquencyByUnitFailed, (state, action) => ({\n ...state,\n delinquencyByUnitLoading: false,\n delinquencyByUnit: null,\n })),\n on(loadRenewalsSummary, (state, action) => ({ ...state, renewalsSummaryLoading: true })),\n on(loadRenewalsSummarySucceded, (state, action) => ({\n ...state,\n renewalsSummaryLoading: false,\n renewalsSummary: action.renewalsSummary,\n })),\n on(loadRenewalsSummaryFailed, (state, action) => ({\n ...state,\n renewalsSummaryLoading: false,\n renewalsSummary: null,\n })),\n on(clearRenewalsSummary, (state, action) => ({\n ...state,\n renewalsSummary: null,\n })),\n\n on(selectedPropertyId, (state, action) => ({ ...state, selectedPropertyId: action.propertyId })),\n\n on(loadUnitDetails, (state, action) => ({ ...state, unitDetailsLoading: true })),\n on(loadUnitDetailsSuccess, (state, action) => ({\n ...state,\n unitDetailsLoading: false,\n unitDetails: action.unitDetails,\n })),\n on(loadUnitDetailsFailed, (state, action) => ({ ...state, unitDetailsLoading: false, unitDetails: [] })),\n on(loadUnitDetailsByType, (state, action) => ({ ...state, unitDetailsByTypeLoading: true })),\n on(loadUnitDetailsByTypeSuccess, (state, action) => ({\n ...state,\n unitDetailsByTypeLoading: false,\n unitDetailsByType: action.unitDetailsByType,\n })),\n on(loadUnitDetailsByTypeFailed, (state, action) => ({\n ...state,\n unitDetailsByTypeLoading: false,\n unitDetailsByType: [],\n })),\n on(loadRenewalsDetails, (state, action) => ({ ...state, renewalDetailsCombinedLoading: true })),\n on(loadRenewalsDetailsSuccess, (state, action) => ({\n ...state,\n renewalDetailsCombinedLoading: false,\n renewalDetailsCombined: action.renewalDetailsCombined,\n })),\n on(loadRenewalsDetailsFailed, (state, action) => ({\n ...state,\n renewalDetailsCombinedLoading: false,\n renewalsDetails: {\n renewalDetailsCombined: [],\n renewalKPI: null,\n },\n })),\n on(selectedDashboardViewType, (state, action) => ({\n ...state,\n selectedDashboardViewType: action.dashboardViewType,\n })),\n on(selectedPortfolioId, (state, action) => ({ ...state, selectedPortfolioId: action.portfolioId })),\n on(loadMyProperties, (state, action) => ({ ...state, myPropertiesLoading: true })),\n on(loadMyPropertiesSuccess, (state, action) => ({\n ...state,\n myPropertiesLoading: false,\n myProperties: action.myProperties,\n })),\n on(loadMyPropertiesFailed, (state, action) => ({\n ...state,\n myPropertiesLoading: false,\n myProperties: [],\n })),\n on(selectedDashboardMode, (state, action) => ({ ...state, dashboardMode: action.dashboardMode })),\n on(setCustomBreadcrumbs, (state, action) => ({ ...state, breadcrumbList: action.breadcrumbList })),\n\n /**\n * load Units With Active Turnovers\n */\n on(loadUnitsWithActiveTurnovers, (state, action) => ({ ...state, unitListWithActiveTurnoverLoading: true })),\n on(loadUnitsWithActiveTurnoversSuccess, (state, action) => ({\n ...state,\n unitListWithActiveTurnover: action.unitList,\n unitListWithActiveTurnoverLoading: false,\n })),\n on(loadUnitsWithActiveTurnoversFailed, (state, action) => ({\n ...state,\n unitListWithActiveTurnover: [],\n unitListWithActiveTurnoverLoading: false,\n })),\n on(resetUnitsWithActiveTurnoversList, (state, action) => ({\n ...state,\n unitListWithActiveTurnover: [],\n })),\n /**\n * load Units With Active Turnovers\n */\n on(loadUnitList, (state, action) => ({ ...state, unitListLoading: true })),\n on(loadUnitListSuccess, (state, action) => ({\n ...state,\n unitList: action.unitList,\n unitListLoading: false,\n })),\n on(loadUnitListFailed, (state, action) => ({\n ...state,\n unitList: [],\n unitListLoading: false,\n })),\n on(resetUnitList, (state, action) => ({\n ...state,\n unitList: [],\n })),\n\n /**\n * load Unit\n */\n on(loadUnit, (state, action) => ({ ...state, unitLoading: true })),\n on(loadUnitSuccess, (state, action) => ({\n ...state,\n unit: action.unit,\n unitLoading: false,\n })),\n on(loadUnitFailed, (state, action) => ({\n ...state,\n unit: null,\n unitLoading: false,\n })),\n on(clearUnit, (state, action) => ({\n ...state,\n unit: null,\n })),\n\n /**\n * update Unit\n */\n on(updateUnit, (state, action) => ({ ...state, unitLoading: true })),\n on(updateUnitSuccess, (state, action) => ({\n ...state,\n unit: action.updatedUnit,\n unitLoading: false,\n })),\n on(updateUnitFailed, (state, action) => ({\n ...state,\n unit: null,\n unitLoading: false,\n })),\n\n /**\n * update Unit DoNotAutoCreateTurns\n */\n on(updateUnitDoNotAutoCreateTurns, (state, action) => ({ ...state, unitDoNotAutoCreateTurnsLoading: true })),\n on(updateUnitDoNotAutoCreateTurnsSuccess, (state, action) => ({\n ...state,\n unit: { ...state.unit, doNotAutoCreateTurns: action.doNotAutoCreateTurns },\n unitDoNotAutoCreateTurnsLoading: false,\n })),\n on(updateUnitDoNotAutoCreateTurnsFailed, (state, action) => ({\n ...state,\n unit: { ...state.unit },\n unitDoNotAutoCreateTurnsLoading: false,\n })),\n\n /**\n * get renewal Strategy For Unit\n */\n on(getRenewalStrategyForUnit, (state, action) => ({ ...state, renewalStrategyForUnitLoading: true })),\n on(getRenewalStrategyForUnitSuccess, (state, action) => ({\n ...state,\n renewalStrategyForUnit: action.unitTypeRentTarget,\n renewalStrategyForUnitLoading: false,\n })),\n on(getRenewalStrategyForUnitFailed, (state, action) => ({\n ...state,\n renewalStrategyForUnit: null,\n renewalStrategyForUnitLoading: false,\n })),\n /**\n * current portfolio\n */\n on(setCurrentPortfolio, (state, action) => ({\n ...state,\n currentPortfolioId: action.portfolioId,\n })),\n on(resetCurrentPortfolio, (state, action) => ({\n ...state,\n currentPortfolioId: null,\n })),\n\n /**\n * current property\n */\n on(setCurrentProperty, (state, action) => ({\n ...state,\n currentPropertyId: action.propertyId,\n })),\n on(resetCurrentProperty, (state, action) => ({\n ...state,\n currentPropertyId: null,\n })),\n on(joinProperties, (state, action) => ({\n ...state,\n joinProperties: action.state,\n })),\n on(setVacancyLossAttrType, (state, action) => ({\n ...state,\n selectedVacancyLossAttr: action.attrType,\n })),\n on(setVacancyLossThreshold, (state, action) => {\n let selectedVacancyLossThresholdKpiType, selectedVacancyLossThresholdKpiTypePerTurn: PortfolioKpiType;\n switch (action.thresholdType) {\n case VacancyLostThreshold.None:\n selectedVacancyLossThresholdKpiType = PortfolioKpiType.VacancyLossNone;\n selectedVacancyLossThresholdKpiTypePerTurn = PortfolioKpiType.VacancyLossNoneActiveTurns;\n break;\n case VacancyLostThreshold.Medium:\n selectedVacancyLossThresholdKpiType = PortfolioKpiType.VacancyLossMedium;\n selectedVacancyLossThresholdKpiTypePerTurn = PortfolioKpiType.VacancyLossMediumActiveTurns;\n break;\n case VacancyLostThreshold.High:\n selectedVacancyLossThresholdKpiType = PortfolioKpiType.VacancyLossHigh;\n selectedVacancyLossThresholdKpiTypePerTurn = PortfolioKpiType.VacancyLossHighActiveTurns;\n break;\n }\n return {\n ...state,\n selectedVacancyLossThreshold: action.thresholdType,\n selectedVacancyLossThresholdKpiType,\n selectedVacancyLossThresholdKpiTypePerTurn,\n };\n })\n);\n","import { MetaReducer, createReducer, on } from '@ngrx/store';\n\nimport {\n clearPortfolioKpiTrendLines,\n clearPortfolioKpis,\n loadPortfolioKpiTrendLines,\n loadPortfolioKpis,\n loadPortfolioKpisFailed,\n loadPortfolioKpisTrend,\n loadPortfolioKpisTrendFailed,\n setChartSelectorValue,\n setChartSettingsValue,\n setPortfolioKpiTrendLines,\n setPortfolioKpis,\n setPortfolioKpisFilter,\n setPortfolioKpisTrend,\n} from '@dashboards/actions/kpi.actions';\nimport { RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { KpiType } from '@shared/enums/kpi-type';\nimport { KpiWindowType } from '@shared/enums/kpi-window-type';\nimport { PortfolioKpiFilter } from '@shared/interfaces/portfolio-kpi-filter';\nimport { hydrationMetaReducer, pathInitialValue } from '@shared/reducers/hydration-meta.reducer';\n\nexport const kpiFeatureKey = 'dashboard-kpis';\n\nexport interface DashboardKpisState {\n portfolioKpis: RestPortfolioKpi[];\n portfolioKpisLoading: boolean;\n portfolioKpisTrend: RestPortfolioKpi[];\n portfolioKpisTrendLoading: boolean;\n portfolioKpisFilter: PortfolioKpiFilter;\n portfolioKpiTrendLines: RestPortfolioKpi[];\n portfolioKpiTrendLinesLoading: boolean;\n chartSelectors: {\n [key: string]: number;\n };\n chartSettings: {\n [key: string]: any;\n };\n}\n\nexport const initialState: DashboardKpisState = pathInitialValue(\n {\n portfolioKpis: [],\n portfolioKpisTrendLoading: false,\n portfolioKpisFilter: {\n windowType: KpiWindowType.Days30,\n type: KpiType.All,\n },\n portfolioKpisLoading: false,\n portfolioKpisTrend: [],\n portfolioKpiTrendLines: [],\n portfolioKpiTrendLinesLoading: false,\n chartSelectors: {},\n chartSettings: {},\n },\n kpiFeatureKey\n);\n\nexport const metaDashboardKpiReducers: Array> = [\n hydrationMetaReducer(kpiFeatureKey),\n];\n\nexport const reducer = createReducer(\n initialState,\n on(setPortfolioKpis, (state, action) => ({\n ...state,\n portfolioKpisLoading: false,\n portfolioKpis: action.kpis,\n })),\n on(setPortfolioKpisTrend, (state, action) => ({\n ...state,\n portfolioKpisTrendLoading: false,\n portfolioKpisTrend: action.kpis,\n })),\n on(loadPortfolioKpis, (state, action) => ({\n ...state,\n portfolioKpisLoading: true,\n })),\n on(loadPortfolioKpisTrend, (state, action) => ({\n ...state,\n portfolioKpisTrendLoading: true,\n })),\n on(loadPortfolioKpisFailed, (state, action) => ({\n ...state,\n portfolioKpisLoading: false,\n })),\n on(loadPortfolioKpisTrendFailed, (state, action) => ({\n ...state,\n portfolioKpisTrendLoading: false,\n })),\n on(setPortfolioKpisFilter, (state, action) => ({\n ...state,\n portfolioKpisFilter: action.portfolioKpisFilter,\n })),\n on(clearPortfolioKpis, state => ({\n ...state,\n portfolioKpis: [],\n portfolioKpisTrend: [],\n })),\n on(setPortfolioKpiTrendLines, (state, action) => ({\n ...state,\n portfolioKpiTrendLines: action.kpis,\n portfolioKpiTrendLinesLoading: false,\n })),\n on(clearPortfolioKpiTrendLines, state => ({\n ...state,\n portfolioKpiTrendLines: [],\n })),\n on(setChartSelectorValue, (state, action) => ({\n ...state,\n chartSelectors: { ...state.chartSelectors, [action.selectorId]: action.value },\n })),\n on(setChartSettingsValue, (state, action) => ({\n ...state,\n chartSettings: { ...state.chartSettings, [action.chartId]: action.value },\n })),\n on(loadPortfolioKpiTrendLines, state => ({\n ...state,\n portfolioKpiTrendLinesLoading: true,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromDashboards from '../reducers/dashboards.reducer';\n\nexport const selectDashboardsState = createFeatureSelector(\n fromDashboards.dashboardsFeatureKey\n);\n\nexport const selectPropertyUserTaskList = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.propertyUserTaskList\n);\nexport const selectPropertyUserTaskListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.propertyUserTaskListLoading\n);\n\nexport const selectMyTasks = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.myTasks);\nexport const selectMyTasksLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myTasksLoading\n);\nexport const selectMyTasksTurnoversCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myTasksTurnoversCount\n);\nexport const selectStaleTurnoversCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.staleTurnoversCount\n);\nexport const selectLateTurnoversCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.lateTurnoversCount\n);\n\nexport const selectMyTasksTicketsCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myTasksTicketsCount\n);\n\nexport const selectUserTaskList = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.userTaskList\n);\nexport const selectUserTaskListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.userTaskListLoading\n);\n\nexport const selectPortfolioUserTaskList = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.portfolioUserTaskList\n);\nexport const selectPortfolioUserTaskListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.portfolioUserTaskListLoading\n);\nexport const selectKanbanListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.kanbanListLoading\n);\n\nexport const selectKanbanListCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.kanbanListCount\n);\n\nexport const selectPropertyKpiLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.propertyKpiLoading\n);\n\nexport const selectPropertyKpi = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.propertyKpi);\n\nexport const selectSelectedPropertyId = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedPropertyId\n);\n\nexport const selectUnitsSummaryByProperty = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitsSummaryByProperty\n);\nexport const selectUnitsSummaryByPropertyLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitsSummaryByPropertyLoading\n);\n\nexport const selectActiveTurnoversSummary = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.activeTurnoversSummary\n);\nexport const selectActiveTurnoversSummaryLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.activeTurnoversSummaryLoading\n);\n\nexport const selectActiveTurnoversDetails = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.activeTurnoversDetails\n);\nexport const selectActiveTurnoversDetailsLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.activeTurnoversDetailsLoading\n);\n\nexport const selectDelinquencyByUnit = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencyByUnit\n);\nexport const selectDelinquencyByUnitLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencyByUnitLoading\n);\n\nexport const selectDelinquencySummary = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencySummary\n);\nexport const selectDelinquencySummaryLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencySummaryLoading\n);\n\nexport const selectRenewalsSummary = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalsSummary\n);\nexport const selectRenewalsSummaryLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalsSummaryLoading\n);\n\nexport const selectUnitDetails = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unitDetails);\nexport const selectUnitDetailsLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDetailsLoading\n);\n\nexport const selectUnitDetailsByType = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDetailsByType\n);\nexport const selectUnitDetailsByTypeLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDetailsByTypeLoading\n);\n\nexport const selectLoadRenewalsDetails = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalDetailsCombined\n);\nexport const selectLoadRenewalsDetailsLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalDetailsCombinedLoading\n);\n\nexport const selectCurrentDashboardViewType = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedDashboardViewType\n);\n\nexport const selectCurrentDashboardViewTypeSimpleText = createSelector(\n selectCurrentDashboardViewType,\n selectedDashboardViewType => selectedDashboardViewType?.simpleText\n);\n\nexport const selectCurrentDashboardViewTypeEnumerationValue = createSelector(\n selectCurrentDashboardViewType,\n selectedDashboardViewType => selectedDashboardViewType?.enumerationValue\n);\n\nexport const selectSelectedPortfolioId = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedPortfolioId\n);\n\nexport const selectMyProperties = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myProperties\n);\n\nexport const selectMyPropertiesLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myPropertiesLoading\n);\n\nexport const selectSelectedDashboardMode = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.dashboardMode\n);\n\nexport const selectCustomBreadcrumbs = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.breadcrumbList\n);\n/**\n * select Units With Active Turnovers\n */\n\nexport const selectUnitListWithActiveTurnover = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitListWithActiveTurnover\n);\nexport const selectUnitListWithActiveTurnoverLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitListWithActiveTurnoverLoading\n);\n\n/**\n * select Unit list\n */\nexport const selectUnitList = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unitList);\nexport const selectUnitListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitListLoading\n);\n\n/**\n * select unit\n */\nexport const selectUnit = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unit);\nexport const selectUnitLoading = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unitLoading);\n\n/**\n * select unit unitDoNotAutoCreateTurnsLoading\n */\nexport const selectUnitDoNotAutoCreateTurnsLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDoNotAutoCreateTurnsLoading\n);\n\n/**\n * select renewal Strategy For Unit\n */\nexport const selectRenewalStrategyForUnit = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalStrategyForUnit\n);\nexport const selectRenewalStrategyForUnitLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalStrategyForUnitLoading\n);\n\n/**\n * current property\n */\nexport const selectCurrentProperty = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.currentPropertyId\n);\n\n/**\n * current portfolio\n */\nexport const selectCurrentPortfolio = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.currentPortfolioId\n);\n\nexport const selectJoinProperties = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.joinProperties\n);\n\nexport const selectSelectedVacancyLossAttr = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossAttr\n);\n\nexport const selectSelectedVacancyLossThreshold = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossThreshold\n);\n\nexport const selectSelectedVacancyLossThresholdKpiType = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossThresholdKpiType\n);\n\nexport const selectSelectedVacancyLossThresholdKpiTypePerTurn = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossThresholdKpiTypePerTurn\n);\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { KpiService } from '@app/services/kpi.service';\nimport {\n loadPortfolioKpiTrendLines,\n loadPortfolioKpis,\n loadPortfolioKpisFailed,\n loadPortfolioKpisTrend,\n loadPortfolioKpisTrendFailed,\n setPortfolioKpiTrendLines,\n setPortfolioKpis,\n setPortfolioKpisTrend,\n} from '@dashboards/actions/kpi.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n@Injectable()\nexport class KpiEffects {\n loadPortfolioKpi$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPortfolioKpis),\n switchMap(action =>\n this.kpiService.fetch(action.portfolioId, 0, action.kpiTypes).pipe(\n map(kpis => {\n return setPortfolioKpis({ kpis: kpis || [] });\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorPortfolioKpi);\n return of(loadPortfolioKpisFailed());\n })\n )\n )\n )\n );\n\n loadPortfolioKpisTrend$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPortfolioKpisTrend),\n switchMap(action =>\n this.kpiService.fetch(action.portfolioId, -action.dateOffset, action.kpiTypes).pipe(\n map(kpis => {\n return setPortfolioKpisTrend({ kpis: kpis || [] });\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorPortfolioKpi);\n return of(loadPortfolioKpisTrendFailed());\n })\n )\n )\n )\n );\n\n loadPortfolioKpiTrendLines$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPortfolioKpiTrendLines),\n switchMap(action =>\n this.kpiService.trend(action.portfolioId, action.kpiTypes, action.trendDays).pipe(\n map(kpis => {\n return setPortfolioKpiTrendLines({ kpis: kpis || [] });\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorPortfolioKpi);\n return of(loadPortfolioKpisTrendFailed());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private store: Store<{}>,\n private snackbarService: SnackbarService,\n private kpiService: KpiService\n ) {}\n}\n","export enum UserRoles {\n Unassigned = 'unassigned',\n}\n","

Delete general role summary

\n\n
\n errorDelete general role operation failed.\n
\n General role \n {{ data[0]?.generalRole?.roleName }}\n is in use by following users:\n
  • \n \n {{ item?.user?.firstName }} {{ item?.user?.lastName }}\n \n {{ item?.user?.email }}\n
  • \n
    \n\n\n \n\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-delete-role-summary-dialog',\n templateUrl: './delete-role-summary-dialog.component.html',\n styleUrls: ['./delete-role-summary-dialog.component.scss'],\n})\nexport class DeleteRoleSummaryDialogComponent {\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {}\n\n close() {\n this.dialogRef.close();\n }\n}\n","import { first } from 'lodash';\n\nimport { UserRoles } from '@shared/enums/user-roles';\nimport { UserToGeneralRoleMapping } from '@shared/interfaces/user-to-general-role-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { IsUserExistingPipe } from '@shared/pipes/is-user-existing.pipe';\n\nconst isUserExisting = new IsUserExistingPipe();\n\nexport function combineUsersWithGeneralRoles(\n allUsers: RestUserModel[],\n allUserToGeneralRoleMapping: UserToGeneralRoleMapping[]\n): UserWithGeneralRole[] {\n return allUsers.map(user => {\n const entry = first((allUserToGeneralRoleMapping || []).filter(item => item.userId === user.id));\n const roleId = entry?.roleId || null;\n const roleName = isUserExisting.transform(user) ? entry?.associatedRole.roleName || null : UserRoles.Unassigned;\n return {\n ...user,\n roleId,\n roleName,\n };\n });\n}\n\nfunction userWithoutRole(newUser) {\n if (isUserExisting.transform(newUser)) {\n return newUser;\n }\n\n newUser.roleName = UserRoles.Unassigned;\n return newUser;\n}\n\nfunction userWithGeneralRole(newUser, userRole) {\n newUser.roleName = isUserExisting.transform(newUser) ? userRole.roleName : UserRoles.Unassigned;\n\n return newUser;\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { filter, find, lowerFirst, transform } from 'lodash';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';\n\nimport { selectUserGeneralRole } from '@app/modules/shared/selectors/user.selectors';\nimport { AdminPanelService } from '@app/services/admin-panel.service';\nimport { UserService } from '@app/services/user.service';\nimport { loadUserData } from '@shared/actions/user.actions';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { GeneralRoleToPermissionLevel } from '@shared/interfaces/general-role-to-permission-level';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { UserToGeneralRoleMapping } from '@shared/interfaces/user-to-general-role-mapping';\nimport { UserToGeneralRoleModel } from '@shared/interfaces/user-to-general-role-model';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { RestapiService } from 'src/app/services/restapi.service';\n\nimport * as AdministrationActions from '../actions/administration.actions';\nimport {\n addingNewUserFailed,\n addingNewUserSucceeded,\n assignUserToProperty,\n assignUserToPropertyError,\n assignUserToPropertySuccess,\n clearAllUsers,\n deleteGeneralRoleFailed,\n deleteGeneralRoleSucceeded,\n inviteNewUser,\n inviteNewUserError,\n inviteNewUserSuccess,\n loadAllGeneralRolesSucceeded,\n loadAllGeneralRolesToPermissionMappingSucceeded,\n loadAllPermissionLevelsSucceeded,\n loadAllPropertiesRolesSucceeded,\n loadAllUserToProperyMappingsSucceeded,\n loadAllUsers,\n loadAllUsersSucceeded,\n loadPropertiesStructure,\n loadPropertiesStructureSucceeded,\n loadPropertyUsersFailed,\n loadPropertyUsersSucceeded,\n loadUserToRoleMappingSucceeded,\n reactivateUser,\n reactivateUserSucceeded,\n removeUser,\n removeUserFailed,\n removeUserSucceeded,\n removingPropertyAssignedUser,\n removingPropertyAssignedUserError,\n removingPropertyAssignedUserSuccess,\n requestFailure,\n saveUserToGeneralRole,\n saveUserToGeneralRoleError,\n saveUserToGeneralRoleSuccess,\n savingGeneralRoleFailed,\n savingGeneralRoleSucceeded,\n setAllUsersCombinedWithGeneralRoles,\n startAddNewUser,\n startDeleteGeneralRole,\n startSavingGeneralRole,\n startUpdatingGeneralRole,\n updateUserData,\n updateUserDataSuccess,\n updatingGeneralRoleFailed,\n updatingGeneralRoleSucceeded,\n} from '../actions/administration.actions';\nimport { DeleteRoleSummaryDialogComponent } from '../components/delete-role-summary-dialog/delete-role-summary-dialog.component';\nimport { combineUsersWithGeneralRoles } from '../functions/combineUsersWithRoles';\nimport {\n selectActiveUsers,\n selectAllGeneralRoles,\n selectAllUserToGeneralRoleMapping,\n selectAllUsers,\n} from '../selectors/administration.selectors';\n\n@Injectable()\nexport class AdministrationEffects {\n loadAllUsers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadAllUsers),\n exhaustMap(() => {\n return this.userService.getUserList().pipe(\n map(list =>\n loadAllUsersSucceeded({\n activeUsers: filter(list, { isActive: true }),\n inactiveUsers: filter(list, { isActive: false }),\n })\n ),\n catchError(error => {\n return of(requestFailure(error));\n })\n );\n })\n )\n );\n\n loadPropertyUsers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadPropertyUsers),\n exhaustMap(action => {\n return this.userService.getPropertyUserList(action.propertyId).pipe(\n map(list =>\n loadPropertyUsersSucceeded({\n activePropertyUsers: filter(list, { isActive: true }),\n inactivePropertyUsers: filter(list, { isActive: false }),\n })\n ),\n catchError(error => {\n return of(loadPropertyUsersFailed());\n })\n );\n })\n )\n );\n\n loadAllPermissionLevels$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadAllPermissionLevels),\n exhaustMap(() =>\n this.restapiService.getData(`AdminPanel/PermissionLevels`).pipe(\n map(permissionLevels => loadAllPermissionLevelsSucceeded({ result: permissionLevels })),\n catchError(error => of(requestFailure(error)))\n )\n )\n )\n );\n\n loadAllGeneralRolesToPermissionMapping$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadAllGeneralRolesToPermissionMapping),\n exhaustMap(() =>\n this.restapiService.getData(`AdminPanel/RolesToPermissions`).pipe(\n map(generalRoleToPermissionMapping =>\n loadAllGeneralRolesToPermissionMappingSucceeded({ result: generalRoleToPermissionMapping })\n ),\n catchError(error => of(requestFailure(error)))\n )\n )\n )\n );\n\n loadAllPropertyRoles$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadAllPropertyRoles),\n exhaustMap(() =>\n this.restapiService.getData(`AdminPanel/PropertyRoles`).pipe(\n map(propertiesRoles => loadAllPropertiesRolesSucceeded({ result: propertiesRoles })),\n catchError(error => of(requestFailure(error)))\n )\n )\n )\n );\n\n loadUserToRoleMapping$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadUserToRoleMapping),\n exhaustMap(() =>\n this.restapiService.getData(`AdminPanel/UserToGeneralRole/`).pipe(\n map(userToGeneralRole => loadUserToRoleMappingSucceeded({ userToGeneralRole })),\n catchError(error => of(requestFailure(error)))\n )\n )\n )\n );\n\n loadAllGeneralRoles$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadAllGeneralRoles),\n exhaustMap(() =>\n this.restapiService.getData(`AdminPanel/GeneralRoles/`).pipe(\n map(generalRoles => loadAllGeneralRolesSucceeded({ generalRoles })),\n catchError(error => of(requestFailure(error)))\n )\n )\n )\n );\n\n loadAllUserToPropertyMappings$ = createEffect(() =>\n this.actions$.pipe(\n ofType(AdministrationActions.loadAllUserToPropertyMappings),\n exhaustMap(() =>\n this.restapiService.getData(`AdminPanel/UserToPropertyRole/`).pipe(\n map(userToPropertyMapping => loadAllUserToProperyMappingsSucceeded({ userToPropertyMapping })),\n catchError(error => of(requestFailure(error)))\n )\n )\n )\n );\n\n combineUsersWithGeneralRoles$ = createEffect(() =>\n this.actions$.pipe(\n ofType(clearAllUsers, loadAllUsersSucceeded, loadUserToRoleMappingSucceeded),\n withLatestFrom(this.store.select(selectAllUsers), this.store.select(selectAllUserToGeneralRoleMapping)),\n map(([, allUsers, allUserToGeneralRoleMapping]) => {\n if (!allUsers || !allUserToGeneralRoleMapping) {\n return setAllUsersCombinedWithGeneralRoles({ usersWithGeneralRoles: null });\n }\n\n const usersCombinedWithRoles = combineUsersWithGeneralRoles(allUsers, allUserToGeneralRoleMapping);\n\n return setAllUsersCombinedWithGeneralRoles({ usersWithGeneralRoles: usersCombinedWithRoles });\n }),\n catchError(error => of(requestFailure(error)))\n )\n );\n\n loadPropertiesStructure$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPropertiesStructure),\n exhaustMap(() => {\n return this.restapiService.getData(`AdminPanel/PropertiesStructure`).pipe(\n map(propertiesStructure => {\n return loadPropertiesStructureSucceeded({ propertiesStructure });\n }),\n catchError(error => of(requestFailure(error)))\n );\n })\n )\n );\n\n startAddingNewUser$ = createEffect(() =>\n this.actions$.pipe(\n ofType(startAddNewUser),\n mergeMap(action => {\n return this.restapiService.create(`Users`, action.user).pipe(\n map(user => addingNewUserSucceeded({ user })),\n catchError(error => {\n return of(requestFailure(error), addingNewUserFailed());\n })\n );\n })\n )\n );\n\n saveUserToGeneralRole$ = createEffect(() =>\n this.actions$.pipe(\n ofType(saveUserToGeneralRole),\n switchMap(action =>\n this.adminPanelService.setUserToGeneralRole(action.usersToGeneralRoleList).pipe(\n map(user => saveUserToGeneralRoleSuccess()),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorAssigningUserToRole);\n return of(saveUserToGeneralRoleError());\n })\n )\n )\n )\n );\n\n saveUserToPropertyRole$ = createEffect(() =>\n this.actions$.pipe(\n ofType(assignUserToProperty),\n switchMap(action =>\n this.adminPanelService.setUserToPropertyRole(action.userToPropertyRoleList).pipe(\n map(user => assignUserToPropertySuccess()),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorAssigningUserToProperty);\n return of(assignUserToPropertyError());\n })\n )\n )\n )\n );\n\n deleteUserToPropertyRole$ = createEffect(() =>\n this.actions$.pipe(\n ofType(removingPropertyAssignedUser),\n switchMap(action =>\n this.adminPanelService.removeUserFromPropertyRole(action.deleteUserToPropertyMappings).pipe(\n map(user => removingPropertyAssignedUserSuccess()),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorRemovingPropertyAssignedUser);\n return of(removingPropertyAssignedUserError());\n })\n )\n )\n )\n );\n\n deleteGeneralRole$ = createEffect(() =>\n this.actions$.pipe(\n ofType(startDeleteGeneralRole),\n mergeMap(generalRole =>\n this.restapiService.create(`AdminPanel/GeneralRoles/remove`, [generalRole.id]).pipe(\n withLatestFrom(this.store.select(selectAllGeneralRoles)),\n mergeMap(([, oldGeneralRoles]) => {\n const newGeneralRoles = oldGeneralRoles.filter(oldRole => oldRole.id !== generalRole.id);\n return [\n loadAllGeneralRolesSucceeded({ generalRoles: newGeneralRoles }),\n deleteGeneralRoleSucceeded(generalRole),\n ];\n }),\n catchError(error => of(deleteGeneralRoleFailed(error)))\n )\n )\n )\n );\n\n deleteGeneralRoleFailed$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(deleteGeneralRoleFailed),\n withLatestFrom(this.store.select(selectActiveUsers), this.store.select(selectAllGeneralRoles)),\n tap(([result, allUsers, allGeneralRoles]) => {\n const feedback = result.error.message.split('Roles in use error: ')[1];\n const parsedFeedback = this.parseGeneralRoleFeedback(feedback);\n const usersWithRolesList = transform(\n parsedFeedback,\n (acc, entry) => {\n const user = find(allUsers, { id: entry.userId });\n const generalRole = find(allGeneralRoles, { id: entry.roleId });\n acc.push({ user, generalRole });\n },\n []\n );\n this.dialog.open(DeleteRoleSummaryDialogComponent, {\n autoFocus: false,\n data: usersWithRolesList,\n width: '620px',\n });\n })\n ),\n { dispatch: false }\n );\n\n startSavingGeneralRole$ = createEffect(() =>\n this.actions$.pipe(\n ofType(startSavingGeneralRole),\n mergeMap(({ generalRole }) =>\n this.restapiService.create(`AdminPanel/GeneralRoles`, [generalRole]).pipe(\n tap(() => {\n this.router.navigate([AppRoutes.SETTINGS_ROLES]).then();\n }),\n map(() => savingGeneralRoleSucceeded()),\n catchError(error => of(savingGeneralRoleFailed(), requestFailure(error)))\n )\n )\n )\n );\n\n startUpdatingGeneralRole$ = createEffect(() =>\n this.actions$.pipe(\n ofType(startUpdatingGeneralRole),\n withLatestFrom(this.store.select(selectUserGeneralRole)),\n mergeMap(([{ generalRole }, currentUserGeneralRole]) =>\n this.restapiService.update(`AdminPanel/GeneralRoles`, [generalRole]).pipe(\n tap(() => {\n this.router.navigate([AppRoutes.SETTINGS_ROLES]).then();\n }),\n mergeMap(() => {\n if (generalRole.roleName === currentUserGeneralRole) {\n this.userService.expireCashedUserData();\n return [updatingGeneralRoleSucceeded(), loadUserData()];\n }\n\n return [updatingGeneralRoleSucceeded()];\n }),\n catchError(error => of(updatingGeneralRoleFailed(), requestFailure(error)))\n )\n )\n )\n );\n\n requestFailure$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(requestFailure),\n tap(error => {\n this.snackbarService.error(error.message);\n })\n ),\n { dispatch: false }\n );\n\n inviteNewUser$ = createEffect(() =>\n this.actions$.pipe(\n ofType(inviteNewUser),\n switchMap(action =>\n this.userService.inviteUser(action.user).pipe(\n map(user => {\n const userId = user.id;\n const roleId = action.roleId;\n const usersToGeneralRoleList: UserToGeneralRoleModel[] = [{ roleId, userId }];\n const userToPropertyRoleList: UserToPropertyMapping[] = action.selectedProperty.map(\n propertyId => {\n return {\n propertyId,\n userId,\n roleId,\n id: 0,\n };\n }\n );\n\n return { user, usersToGeneralRoleList, userToPropertyRoleList };\n }),\n mergeMap(param => [\n inviteNewUserSuccess({ user: param.user }),\n saveUserToGeneralRole({ usersToGeneralRoleList: param.usersToGeneralRoleList }),\n assignUserToProperty({ userToPropertyRoleList: param.userToPropertyRoleList }),\n ]),\n catchError(error => {\n const errorMessage = error?.error ?? '';\n const message = errorMessage.includes('User exists in Azure Active Directory')\n ? SnackbarErrorMessage.ErrorUserAlreadyExist.replace('{0}', action.user.email)\n : errorMessage.includes('One or more properties contains invalid values')\n ? SnackbarErrorMessage.ErrorWrongEmail\n : SnackbarErrorMessage.ErrorInvitingUser;\n this.snackbarService.error(message);\n return of(inviteNewUserError());\n })\n )\n )\n )\n );\n\n updateUserData$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateUserData),\n switchMap(action =>\n this.userService.setUserData(action.user).pipe(\n map(user => {\n const userId = user.id;\n const roleId = action.roleId;\n const usersToGeneralRoleList: UserToGeneralRoleModel[] = [{ roleId, userId }];\n return usersToGeneralRoleList;\n }),\n mergeMap(usersToGeneralRoleList => [\n updateUserDataSuccess(),\n saveUserToGeneralRole({ usersToGeneralRoleList }),\n assignUserToProperty({ userToPropertyRoleList: action.userToPropertyRoleList }),\n removingPropertyAssignedUser({ deleteUserToPropertyMappings: action.deleteUserToPropertyMappings }),\n ]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingUser);\n return of(savingGeneralRoleFailed());\n })\n )\n )\n )\n );\n\n removeUser$ = createEffect(() =>\n this.actions$.pipe(\n ofType(removeUser),\n mergeMap(action =>\n this.userService.removeUser(action.user).pipe(\n mergeMap(() => [removeUserSucceeded(), loadAllUsers()]),\n tap(() => {\n this.snackbarService.info(\n `Any of ${action.user.firstName}'s turns/tickets reassigned to their PM` as SnackbarErrorMessage\n );\n }),\n catchError(() => of(removeUserFailed()))\n )\n )\n )\n );\n\n reactivateUser$ = createEffect(() =>\n this.actions$.pipe(\n ofType(reactivateUser),\n mergeMap(action =>\n this.userService.reactivateUser(action.user).pipe(\n mergeMap(() => [reactivateUserSucceeded(), loadAllUsers()]),\n catchError(() => of(removeUserFailed()))\n )\n )\n )\n );\n\n constructor(\n private router: Router,\n private dialog: MatDialog,\n private actions$: Actions,\n private store: Store<{}>,\n private restapiService: RestapiService,\n private snackbarService: SnackbarService,\n private userService: UserService,\n private adminPanelService: AdminPanelService\n ) {}\n\n parseGeneralRoleFeedback(feedback: string): UserToGeneralRoleModel[] {\n const feedbackArray = feedback.split(';');\n return feedbackArray.map(entry => {\n return entry.split(',').reduce((acc, keyValuePair) => {\n const [key, value] = keyValuePair.split(':');\n acc[lowerFirst(key)] = parseInt(value, 10);\n return acc;\n }, {} as UserToGeneralRoleModel);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mergeMap, of, switchMap } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { SystemConfigService } from '@app/services/system-config.service';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport {\n deleteSystemConfig,\n getChatChannels,\n getChatChannelsError,\n getChatChannelsSuccess,\n getSystemConfig,\n getSystemConfigError,\n getSystemConfigSuccess,\n getTimerReport,\n getTimerReportError,\n getTimerReportSuccess,\n setPropertyChatChannels,\n setPropertyChatChannelsError,\n setPropertyChatChannelsSuccess,\n updateSystemConfig,\n updateSystemConfigError,\n updateSystemConfigSuccess,\n} from './system-configuration.actions';\n\n@Injectable()\nexport class SystemConfigurationEffects {\n getSystemConfig$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getSystemConfig),\n switchMap(() =>\n this.systemConfigService.getSystemConfig().pipe(\n map(config => getSystemConfigSuccess({ systemConfig: config })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorRetrievingSystemConfig);\n return of(getSystemConfigError());\n })\n )\n )\n )\n );\n\n deleteSystemConfig$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteSystemConfig),\n switchMap(action =>\n this.systemConfigService.deleteSystemConfig(action.id).pipe(\n mergeMap(config => [getSystemConfig()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingSystemConfig);\n return of(updateSystemConfigError());\n })\n )\n )\n )\n );\n\n updateSystemConfig$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateSystemConfig),\n switchMap(action =>\n (action.pmsCredential.id > 0\n ? this.systemConfigService.updateSystemConfig(action.pmsCredential)\n : this.systemConfigService.addSystemConfig(action.pmsCredential)\n ).pipe(\n mergeMap(config => [updateSystemConfigSuccess(), getSystemConfig()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingSystemConfig);\n return of(updateSystemConfigError());\n })\n )\n )\n )\n );\n\n getTimerReport$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTimerReport),\n switchMap(() =>\n this.systemConfigService.getTimerReport().pipe(\n map(timerReport => getTimerReportSuccess({ timerReport })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorRetrievingTimerReport);\n return of(getTimerReportError());\n })\n )\n )\n )\n );\n\n getChatChannels$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getChatChannels),\n switchMap(() =>\n this.systemConfigService.getChatHooksChannels().pipe(\n map(channels => getChatChannelsSuccess({ channels })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorRetrievingSlackChannels);\n return of(getChatChannelsError());\n })\n )\n )\n )\n );\n\n setPropertyChatChannels$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setPropertyChatChannels),\n switchMap(action =>\n this.systemConfigService.setPropertyChatChannel(action.propertyId, action.channelIds).pipe(\n map(channels => {\n return setPropertyChatChannelsSuccess();\n }),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingSlackChannel);\n return of(setPropertyChatChannelsError());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private systemConfigService: SystemConfigService,\n private snackbarService: SnackbarService\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestBidModel, RestTypedBidAttachment } from '@shared/interfaces/bid.interface';\nimport { RestBulkScopeAndBidModel } from '@shared/interfaces/rest-bulk-scope-and-bid-model';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BidsService {\n constructor(private restApiService: RestapiService) {}\n\n create(bidList: RestBidModel[]): Observable {\n return this.restApiService.create(`Bids`, bidList);\n }\n\n update(bid: RestBidModel): Observable {\n return this.restApiService.update(`Bids/${bid.id}`, bid);\n }\n\n reject(id: number): Observable {\n return this.restApiService.create(`Bids/reject/${id}`, {});\n }\n\n getBid(bidId: number): Observable {\n return this.restApiService.getData(`Bids/${bidId}`);\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Bids/${attachmentToEntity.bidId}/Attachments`,\n attachmentToEntity\n );\n }\n\n getTurnoverBids(turnoverId: number): Observable {\n return this.restApiService.getData(`Bids/turnover/${turnoverId}`);\n }\n\n getCompanyBids(companyId: number): Observable {\n return this.restApiService.getData(`Bids/company/${companyId}`);\n }\n\n getAllBids(): Observable {\n return this.restApiService.getData(`Bids`);\n }\n\n deleteBidAttachment(bidId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Bids/${bidId}/Attachments/${attachmentId}`);\n }\n\n getBidAttachments(bidId: number): Observable {\n return this.restApiService.getData(`Bids/${bidId}/Attachments`);\n }\n\n createBulkScope(bulkScope: RestBulkScopeAndBidModel): Observable {\n return this.restApiService.create(`Bids/bulk-scope-and-bid`, bulkScope);\n }\n\n getBulkScopeList(propertyId: number): Observable {\n return this.restApiService.getData(`Bids/bulk-scope-and-bid/property/${propertyId}`);\n }\n\n getBulkScope(bulkScopeId: number): Observable {\n return this.restApiService.getData(`Bids/bulk-scope-and-bid/${bulkScopeId}`);\n }\n\n updateBulkScope(bulkScope: RestBulkScopeAndBidModel): Observable {\n return this.restApiService.update(`Bids/bulk-scope-and-bid`, bulkScope);\n }\n\n addUnitsToBulk(bulkScope: RestBulkScopeAndBidModel): Observable {\n return this.restApiService.update(`Bids/bulk-scope-and-bid/add-or-update`, bulkScope);\n }\n\n addBulkTurnoversAttachment(body: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create('Turnovers/bulk/Attachments', body);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, map, mergeMap, of, switchMap } from 'rxjs';\n\nimport { BidsService } from '@app/services/bids.service';\nimport { RestBulkScopeAndBidModel } from '@shared/interfaces/rest-bulk-scope-and-bid-model';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport {\n addBulkTurnoversAttachment,\n addBulkTurnoversAttachmentFailed,\n addBulkTurnoversAttachmentSuccess,\n addUnitsToBulk,\n addUnitsToBulkFailed,\n addUnitsToBulkSuccess,\n createNewBulkScope,\n createNewBulkScopeFailed,\n createNewBulkScopeSuccess,\n getBulkScope,\n getBulkScopeFailed,\n getBulkScopeList,\n getBulkScopeListSuccess,\n getBulkScopeSuccess,\n updateBulkScope,\n updateBulkScopeFailed,\n updateBulkScopeSuccess,\n} from '../actions/bulk-and-scope.actions';\n\n@Injectable()\nexport class BulkBidsEffects {\n createNewBulkScope$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createNewBulkScope),\n switchMap(action =>\n this.bidsService.createBulkScope(action.bulkScope).pipe(\n mergeMap((bulkScopeId: RestBulkScopeAndBidModel) => [\n createNewBulkScopeSuccess({ bulkScopeId: bulkScopeId.id }),\n ]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.CreatingBulkScope);\n return of(createNewBulkScopeFailed());\n })\n )\n )\n )\n );\n\n getBulkScope$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getBulkScope),\n switchMap(action =>\n this.bidsService.getBulkScope(action.bulkScopeId).pipe(\n map(bulkScope => getBulkScopeSuccess({ bulkScope })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBulkScope);\n return of(getBulkScopeFailed());\n })\n )\n )\n )\n );\n\n updateBulkScope$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateBulkScope),\n mergeMap(action =>\n this.bidsService.updateBulkScope(action.bulkScope).pipe(\n map(bulkScope => updateBulkScopeSuccess()),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingBulkScope);\n return of(updateBulkScopeFailed());\n })\n )\n )\n )\n );\n\n getBulkScopeList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getBulkScopeList),\n switchMap(action =>\n this.bidsService.getBulkScopeList(action.propertyId).pipe(\n map(list => getBulkScopeListSuccess({ bulkList: list || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBulkScopeList);\n return of(getBulkScopeFailed());\n })\n )\n )\n )\n );\n\n addBulkTurnoversAttachment = createEffect(() =>\n this.actions$.pipe(\n ofType(addBulkTurnoversAttachment),\n mergeMap(action =>\n this.bidsService.addBulkTurnoversAttachment(action.attachment).pipe(\n map(result => addBulkTurnoversAttachmentSuccess()),\n catchError(error => of(addBulkTurnoversAttachmentFailed()))\n )\n )\n )\n );\n\n addUnitsToBulk$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addUnitsToBulk),\n mergeMap(action =>\n this.bidsService.addUnitsToBulk(action.bulkScope).pipe(\n map(() => addUnitsToBulkSuccess()),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBulkScopeList);\n return of(addUnitsToBulkFailed());\n })\n )\n )\n )\n );\n\n constructor(private actions$: Actions, private bidsService: BidsService, private snackbarService: SnackbarService) {}\n}\n","import { Injectable } from '@angular/core';\n\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\nimport { RestapiService } from './restapi.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PunchService {\n constructor(private restApiService: RestapiService) {}\n\n loadPunchById(punchId: number) {\n return this.restApiService.getData(`PunchTickets/${punchId}`);\n }\n\n loadPunchesByTurnoverId(turnoverId: string) {\n return this.restApiService.getData(`PunchTickets/ByTurnoverId/${turnoverId}`);\n }\n\n createPunch(punch: RestTicketModel) {\n return this.restApiService.create(`PunchTickets`, punch);\n }\n\n updatePunch(punch: RestTicketModel) {\n return this.restApiService.update(`PunchTickets/${punch.id}`, punch);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { iif, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { PunchService } from '@app/services/punch.service';\n\nimport {\n loadPunchById,\n loadPunchByIdFailed,\n loadPunchByIdFinished,\n loadPunchesByTurnoverId,\n loadPunchesByTurnoverIdFailed,\n loadPunchesByTurnoverIdFinished,\n sendPunch,\n sendPunchFailed,\n sendPunchFinished,\n} from '../actions/punch.actions';\n\n@Injectable()\nexport class PunchEffects {\n loadPunchById$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPunchById),\n mergeMap(action => {\n return this.punchService.loadPunchById(action.punchId).pipe(\n map(punch => loadPunchByIdFinished({ punch })),\n catchError(error => of(loadPunchByIdFailed()))\n );\n })\n )\n );\n\n sendPunch$ = createEffect(() =>\n this.actions$.pipe(\n ofType(sendPunch),\n mergeMap(action => {\n return iif(\n () => !!action.punch.id,\n this.punchService.updatePunch(action.punch),\n this.punchService.createPunch(action.punch)\n ).pipe(\n map(punch => sendPunchFinished({ punch })),\n catchError(error => of(sendPunchFailed()))\n );\n })\n )\n );\n\n loadPunchesByTurnoverId$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPunchesByTurnoverId),\n mergeMap(action => {\n return this.punchService.loadPunchesByTurnoverId(action.turnoverId as any).pipe(\n map(result => loadPunchesByTurnoverIdFinished({ result })),\n catchError(error => of(loadPunchesByTurnoverIdFailed()))\n );\n })\n )\n );\n\n constructor(private actions$: Actions, private punchService: PunchService) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport {\n AddUpdateTurnoverBid,\n RestTurnoverBid,\n RestTurnoverBidCategory,\n} from '@shared/interfaces/turnover-bids.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnoverBidsService {\n constructor(private restApiService: RestapiService) {}\n\n list(turnoverId: number): Observable {\n return this.restApiService.getData(`turnover/${turnoverId}/bids`);\n }\n\n add(model: AddUpdateTurnoverBid): Observable {\n return this.restApiService.create(`turnover/${model.turnoverId}/bids`, model);\n }\n\n update(model: AddUpdateTurnoverBid): Observable<{}> {\n return this.restApiService.update(`turnover/${model.turnoverId}/bids`, model);\n }\n\n delete(bidId: number): Observable<{}> {\n return this.restApiService.delete(`turnover/bids/${bidId}`);\n }\n\n accept(bidId: number): Observable<{}> {\n return this.restApiService.create(`turnover/bids/${bidId}/accept`, {});\n }\n\n reject(bidId: number): Observable<{}> {\n return this.restApiService.create(`turnover/bids/${bidId}/reject`, {});\n }\n\n approve(bidId: number, approved: boolean | null): Observable<{}> {\n return this.restApiService.create(`turnover/bids/${bidId}/approve`, { approved });\n }\n\n uploadInvoice(bidId: number, fileUploadId: number): Observable<{}> {\n return this.restApiService.create(`turnover/bids/${bidId}/uploadInvoice`, {\n fileUploadId,\n });\n }\n\n categoryList(): Observable {\n return this.restApiService.getData(`turnoverDataBidCategory`);\n }\n\n addCategory(name: string): Observable {\n return this.restApiService.create(`turnoverDataBidCategory`, {\n name,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { TurnoverBidsService } from '@app/services/turnover-bids.service';\nimport {\n acceptTurnoverBid,\n acceptTurnoverBidFailed,\n acceptTurnoverBidSuccess,\n addTurnoverBidCategory,\n addTurnoverBidCategoryFailed,\n addTurnoverBidCategorySuccess,\n approveTurnoverBid,\n approveTurnoverBidFailed,\n approveTurnoverBidSuccess,\n createTurnoverBid,\n createTurnoverBidFailed,\n createTurnoverBidSuccess,\n loadTurnoverBidCategories,\n loadTurnoverBidCategoriesFailed,\n loadTurnoverBidCategoriesSuccess,\n loadTurnoverBids,\n loadTurnoverBidsFailed,\n loadTurnoverBidsSuccess,\n rejectTurnoverBid,\n rejectTurnoverBidFailed,\n rejectTurnoverBidSuccess,\n removeTurnoverBid,\n removeTurnoverBidFailed,\n removeTurnoverBidSuccess,\n updateTurnoverBid,\n updateTurnoverBidFailed,\n updateTurnoverBidSuccess,\n uploadTurnoverBidInvoice,\n uploadTurnoverBidInvoiceFailed,\n uploadTurnoverBidInvoiceSuccess,\n} from '@main-application/turnovers/actions/turnover-bids.actions';\nimport { RestTurnoverBidCategory } from '@shared/interfaces/turnover-bids.interface';\n\n@Injectable()\nexport class TurnoverBidsEffects {\n loadTurnoverBids$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadTurnoverBids),\n mergeMap(action => {\n return this.turnoverBidsService.list(action.turnoverId).pipe(\n map(bids => loadTurnoverBidsSuccess({ bids })),\n catchError(error => of(loadTurnoverBidsFailed()))\n );\n })\n )\n );\n\n createTurnoverBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createTurnoverBid),\n mergeMap(action => {\n return this.turnoverBidsService.add(action.bid).pipe(\n map(bidId => createTurnoverBidSuccess({ bidId, turnoverId: action.bid.turnoverId })),\n catchError(error => of(createTurnoverBidFailed()))\n );\n })\n )\n );\n\n createTurnoverBidSuccess$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createTurnoverBidSuccess),\n mergeMap(action => {\n return of(loadTurnoverBids({ turnoverId: action.turnoverId }));\n })\n )\n );\n\n acceptTurnoverBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(acceptTurnoverBid),\n mergeMap(action => {\n return this.turnoverBidsService.accept(action.bidId).pipe(\n map(bid => acceptTurnoverBidSuccess()),\n catchError(error => of(acceptTurnoverBidFailed()))\n );\n })\n )\n );\n\n rejectTurnoverBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(rejectTurnoverBid),\n mergeMap(action => {\n return this.turnoverBidsService.reject(action.bidId).pipe(\n map(bid => rejectTurnoverBidSuccess()),\n catchError(error => of(rejectTurnoverBidFailed()))\n );\n })\n )\n );\n\n uploadTurnoverBidInvoice$ = createEffect(() =>\n this.actions$.pipe(\n ofType(uploadTurnoverBidInvoice),\n mergeMap(action => {\n return this.fileUploadsService.uploadFile(action.file).pipe(\n map(upload => ({\n upload,\n bid: action.bid,\n }))\n );\n }),\n mergeMap(action => {\n return this.turnoverBidsService.uploadInvoice(action.bid.id, action.upload.id).pipe(\n mergeMap(bid => [loadTurnoverBids({ turnoverId: action.bid.turnoverId }), uploadTurnoverBidInvoiceSuccess()]),\n catchError(error => of(uploadTurnoverBidInvoiceFailed()))\n );\n })\n )\n );\n\n updateTurnoverBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateTurnoverBid),\n mergeMap(action => {\n return this.turnoverBidsService.update(action.bid).pipe(\n map(() => updateTurnoverBidSuccess({ bid: action.bid })),\n catchError(error => of(updateTurnoverBidFailed()))\n );\n })\n )\n );\n\n removeTurnoverBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(removeTurnoverBid),\n mergeMap(action => {\n return this.turnoverBidsService.delete(action.bidId).pipe(\n map(() => removeTurnoverBidSuccess()),\n catchError(error => of(removeTurnoverBidFailed()))\n );\n })\n )\n );\n\n loadTurnoverBidCategories$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadTurnoverBidCategories),\n mergeMap(() => {\n return this.turnoverBidsService.categoryList().pipe(\n map((categories: RestTurnoverBidCategory[]) => loadTurnoverBidCategoriesSuccess({ categories })),\n catchError(error => of(loadTurnoverBidCategoriesFailed()))\n );\n })\n )\n );\n\n addTurnoverBidCategory$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addTurnoverBidCategory),\n mergeMap(action => {\n return this.turnoverBidsService.addCategory(action.name).pipe(\n mergeMap((categoryId: number) => [\n loadTurnoverBidCategories(),\n addTurnoverBidCategorySuccess({ categoryId }),\n ]),\n catchError(error => of(addTurnoverBidCategoryFailed()))\n );\n })\n )\n );\n\n approveTurnoverBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(approveTurnoverBid),\n mergeMap(action => {\n return this.turnoverBidsService.approve(action.bidId, action.approved).pipe(\n map(bid => approveTurnoverBidSuccess()),\n catchError(error => of(approveTurnoverBidFailed()))\n );\n })\n )\n );\n\n constructor(\n private actions$: Actions,\n private turnoverBidsService: TurnoverBidsService,\n private fileUploadsService: FileUploadsService\n ) {}\n}\n","import { UserType } from '@shared/enums/user-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\nimport { RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\nimport { UserData } from '@shared/interfaces/user-data';\n\nexport function UpdateWorkflowStepAssigneeModelFunction(\n workflow: RestWorkflowInstanceModel[],\n workflowStep: WorkflowStepEnumType,\n workflowStepAssignmentModel: RestWorkflowStepAssignmentModel,\n userData?: UserData\n): RestWorkflowInstanceModel[] {\n return workflow.map(item => {\n if (item.workflowStepEnumType === workflowStep) {\n return {\n ...item,\n responsiblePartyId: workflowStepAssignmentModel?.responsiblePartyId || userData?.id || 0,\n responsiblePartyType:\n workflowStepAssignmentModel?.responsiblePartyGroupType || userData?.userType || UserType.None,\n };\n } else {\n return item;\n }\n });\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppliancesService {\n constructor(private restApiService: RestapiService) {}\n\n getAppliance(applianceId: number): Observable {\n return this.restApiService.getData(`Appliances/${applianceId}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { first } from 'lodash';\nimport { iif, of } from 'rxjs';\nimport { catchError, exhaustMap, filter, map, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';\n\nimport { AppliancesService } from '@app/services/appliances.service';\nimport { BidsService } from '@app/services/bids.service';\nimport { CompaniesService } from '@app/services/companies.service';\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { TicketsService } from '@app/services/tickets.service';\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { WorkflowActionsService } from '@app/services/workflow-actions.service';\nimport { WorkflowStepCommentsService } from '@app/services/workflow-step-comments.service';\nimport { resetTurnoversFilters, setTurnoversFilters } from '@dashboards/store';\nimport { TurnoverConfigurationStepAssigneesService } from '@main-application/management/components/turnover-configuration/components/turnover-configuration-step-assignees/services/turnover-configuration-step-assignees.service';\nimport {\n addNewBid,\n addNewBidFail,\n addNewBidSuccess,\n addNewTurnoverTicket,\n addNewTurnoverTicketFailed,\n addNewTurnoverTicketSuccess,\n addWorkflowStepComment,\n addWorkflowStepCommentFailed,\n addWorkflowStepCommentSuccess,\n assignDefaultWorkflowStepAssignee,\n assignDefaultWorkflowStepAssigneeFailed,\n createNewTurnover,\n createNewTurnoverFailed,\n createNewTurnoverSuccess,\n deleteBidAttachment,\n deleteBidAttachmentFailed,\n deleteBidAttachmentSuccess,\n deleteFileFromRepository,\n deleteFileFromRepositoryFailed,\n deleteFileFromRepositorySuccess,\n deleteTurnover,\n deleteTurnoverAttachment,\n deleteTurnoverAttachmentSuccess,\n deleteTurnoverFailed,\n deleteTurnoverSuccess,\n deleteTurnoverTicket,\n deleteTurnoverTicketAttachment,\n deleteTurnoverTicketAttachmentFailed,\n deleteTurnoverTicketAttachmentSuccess,\n deleteTurnoverTicketFailed,\n deleteTurnoverTicketSuccess,\n deleteWorkflowStepComment,\n deleteWorkflowStepCommentFailed,\n deleteWorkflowStepCommentSuccess,\n emptyAction,\n getAllBidList,\n getAllBidListFail,\n getAllBidListSuccess,\n getAppliance,\n getApplianceFailed,\n getApplianceSuccess,\n getBid,\n getBidAttachmentList,\n getBidAttachmentListFailed,\n getBidAttachmentListSuccess,\n getBidCompanyList,\n getBidCompanyListFail,\n getBidCompanyListSuccess,\n getBidFail,\n getBidSuccess,\n getBidTurnoverList,\n getBidTurnoverListFail,\n getBidTurnoverListSuccess,\n getCompanyList,\n getCompanyListFail,\n getCompanyListSuccess,\n getDefaultTurnoversAssignees,\n getDefaultTurnoversAssigneesFailed,\n getDefaultTurnoversAssigneesSuccess,\n getSelectedTicket,\n getSelectedTicketFailed,\n getSelectedTicketSuccess,\n getTicket,\n getTicketAttachments,\n getTicketAttachmentsFailed,\n getTicketAttachmentsSuccess,\n getTicketFailed,\n getTicketSuccess,\n getTurnoverAttachments,\n getTurnoverAttachmentsFailed,\n getTurnoverAttachmentsSuccess,\n getTurnoverData,\n getTurnoverDataFailed,\n getTurnoverDataSuccess,\n getTurnoverTickets,\n getTurnoverTicketsFailed,\n getTurnoverTicketsSuccess,\n getWorkflowStepCommentList,\n getWorkflowStepCommentListFailed,\n getWorkflowStepCommentListSuccess,\n loadTurnoverTimers,\n loadWorkflowAssignmentsByPropertyAndStepId,\n rejectBid,\n rejectBidFail,\n rejectBidSuccess,\n setActiveSections,\n setAttachmentToTurnover,\n setAttachmentToTurnoverFailed,\n setAttachmentToTurnoverSuccess,\n setBidAttachment,\n setBidAttachmentFail,\n setBidAttachmentSuccess,\n setEmptyWorkflowStepAssignee,\n setInactiveFilteredSections,\n setStepAssignee,\n setStepAssigneeFailed,\n setStepAssigneeSuccess,\n setTicketAttachment,\n setTicketAttachmentFail,\n setTicketAttachmentSuccess,\n setTurnoverData,\n setTurnoverDataFailed,\n setTurnoverTimers,\n setTurnoverTimersFailed,\n setTurnoverTimersSuccess,\n setWorkflowStepAssignee,\n setWorkflowStepAssigneeFailed,\n setWorkflowStepAssigneeSuccess,\n setWorkflowStepSuccess,\n toggleAllSections,\n toggleInactiveFilteredSingleSection,\n toggleSingleSection,\n turnoverTimersLoaded,\n updateBid,\n updateBidComment,\n updateBidCommentFail,\n updateBidCommentSuccess,\n updateBidFail,\n updateBidSuccess,\n updateTicketPreview,\n updateTicketPreviewFailed,\n updateTicketPreviewSuccess,\n updateTurnoverAttachment,\n updateTurnoverAttachmentFailed,\n updateTurnoverAttachmentSuccess,\n updateTurnoverTicket,\n updateTurnoverTicketFailed,\n updateTurnoverTicketSuccess,\n updateWorkflowStepComment,\n updateWorkflowStepCommentFailed,\n updateWorkflowStepCommentSuccess,\n workflowAssignmentsByPropertyAndStepIdFailure,\n workflowAssignmentsByPropertyAndStepIdSucceded,\n} from '@main-application/turnovers/actions/turnovers.actions';\nimport {\n selectActivePropertyIds,\n selectAllPropertyIds,\n selectInactiveFilteredPropertyIds,\n selectTurnoverData,\n} from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { UpdateWorkflowStepAssigneeModelFunction } from '@shared/functions/update-workflow-step-responsible-party-model.function';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestTypedBidAttachment } from '@shared/interfaces/bid.interface';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\nimport {\n RestTicketModel,\n RestTurnoverDataModel,\n RestTypedTicketAttachment,\n} from '@shared/interfaces/turnover.interface';\nimport { selectUserData } from '@shared/selectors/user.selectors';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { loadPunchById } from '../actions/punch.actions';\n\n@Injectable()\nexport class TurnoversEffects {\n constructor(\n private actions$: Actions,\n private store: Store<{}>,\n private snackbarService: SnackbarService,\n private turnoversService: TurnoversService,\n private workflowActionsService: WorkflowActionsService,\n private ticketsService: TicketsService,\n private companiesService: CompaniesService,\n private bidsService: BidsService,\n private appliancesService: AppliancesService,\n private workflowStepCommentsService: WorkflowStepCommentsService,\n private responsiblePartiesService: TurnoverConfigurationStepAssigneesService,\n private fileUploadsService: FileUploadsService\n ) {}\n\n createTurnover$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createNewTurnover),\n switchMap(action =>\n this.turnoversService.create(action.postTurnoverModel).pipe(\n mergeMap(turnoverData => [\n createNewTurnoverSuccess({ turnoverData }),\n assignDefaultWorkflowStepAssignee({\n turnoverData,\n workflowStep: turnoverData.activeWorkflowStepType,\n propertyId: action.postTurnoverModel?.propertyId,\n }),\n ]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.CreatingTurnover);\n return of(createNewTurnoverFailed());\n })\n )\n )\n )\n );\n\n assignDefaultWorkflowStepAssignee$ = createEffect(() =>\n this.actions$.pipe(\n ofType(assignDefaultWorkflowStepAssignee),\n withLatestFrom(this.store.select(selectUserData)),\n filter(([action, userData]) => {\n return !first(\n (action.turnoverData.workflow || []).filter(item => item.workflowStepEnumType === action.workflowStep)\n )?.responsiblePartyId;\n }),\n switchMap(([action, userData]) =>\n this.responsiblePartiesService.getWorkflowAssignmentsByStepId(action.propertyId, action.workflowStep).pipe(\n filter(\n (restWorkflowStepAssignmentModel: RestWorkflowStepAssignmentModel) =>\n !!restWorkflowStepAssignmentModel || (action.workflowStep === WorkflowStepEnumType.MoveOut && !!userData)\n ),\n map(workflowStepAssignmentModel => {\n return {\n ...action.turnoverData,\n workflow: UpdateWorkflowStepAssigneeModelFunction(\n action.turnoverData.workflow,\n action.workflowStep,\n workflowStepAssignmentModel,\n userData\n ),\n };\n }),\n switchMap((turnoverData: RestTurnoverDataModel) => {\n return this.turnoversService.update(turnoverData).pipe(\n mergeMap(turnoverData => [getTurnoverData({ turnoverId: turnoverData.id })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AssigningAssignee);\n return of(assignDefaultWorkflowStepAssigneeFailed());\n })\n );\n })\n )\n )\n )\n );\n\n getTurnoverData$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTurnoverData),\n switchMap(action =>\n this.turnoversService.getTurnover(action.turnoverId).pipe(\n map(turnoverData => getTurnoverDataSuccess({ turnoverData })),\n catchError(ex => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTurnoverData);\n return of(getTurnoverDataFailed());\n })\n )\n )\n )\n );\n\n setTurnoverData$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setTurnoverData),\n switchMap(action => {\n return this.turnoversService.update(action.turnoverData).pipe(\n map(turnoverData => getTurnoverDataSuccess({ turnoverData })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingTurnoverData);\n return of(setTurnoverDataFailed());\n })\n );\n })\n )\n );\n\n setStepAssignee$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setStepAssignee),\n switchMap(action => {\n return this.workflowActionsService\n .moveToNextStep(\n action.workflowAction.turnoverId,\n action.workflowAction.nextWorkflowStep,\n action.workflowAction.assigneeId\n )\n .pipe(\n map(() => setStepAssigneeSuccess()),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingTurnoverStepAssignee);\n return of(setStepAssigneeFailed());\n })\n );\n })\n )\n );\n\n getDefaultTurnoversAssignees$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getDefaultTurnoversAssignees),\n switchMap(action => {\n return this.responsiblePartiesService.getResponsiblePartiesByPropertyId(action.propertyId).pipe(\n map(list => getDefaultTurnoversAssigneesSuccess({ defaultTurnoversAssignees: list || [] })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorRetrievingDefaultTurnoverAssignees);\n return of(getDefaultTurnoversAssigneesFailed());\n })\n );\n })\n )\n );\n\n updateDefaultAssigneeOnWorkflowStepChange$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setWorkflowStepSuccess),\n switchMap(action =>\n this.turnoversService.getTurnover(action.turnoverId).pipe(\n map(turnoverData =>\n assignDefaultWorkflowStepAssignee({\n turnoverData,\n workflowStep: action.nextWorkflowStep,\n propertyId: turnoverData.property?.id,\n })\n )\n )\n )\n )\n );\n\n setAttachmentToTurnover$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setAttachmentToTurnover),\n mergeMap(action =>\n this.turnoversService.setAttachment(action.attachmentToEntity).pipe(\n mergeMap(addedAttachment => [\n setAttachmentToTurnoverSuccess({ addedAttachment }),\n !action?.preventReloadList\n ? getTurnoverAttachments({ turnoverId: first(action.attachmentToEntity.turnoverIds) })\n : emptyAction(),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AssigningAttachmentToEntity);\n return of(setAttachmentToTurnoverFailed());\n })\n )\n )\n )\n );\n\n updateTurnoverAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateTurnoverAttachment),\n mergeMap(action =>\n this.turnoversService.updateAttachment(action.attachmentToEntity).pipe(\n mergeMap(addedAttachment => [\n updateTurnoverAttachmentSuccess(),\n getTurnoverAttachments({ turnoverId: first(action.attachmentToEntity.turnoverIds) }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingAttachment);\n return of(updateTurnoverAttachmentFailed());\n })\n )\n )\n )\n );\n\n getTurnoverTickets$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTurnoverTickets),\n switchMap(action =>\n this.ticketsService.getTicketsByTurnover(action.turnoverId).pipe(\n map(list => getTurnoverTicketsSuccess({ turnoverTicketList: list || [] })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTurnoverTickets);\n return of(getTurnoverTicketsFailed());\n })\n )\n )\n )\n );\n\n addNewTurnoverTicket$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addNewTurnoverTicket),\n mergeMap(action => {\n return this.ticketsService.create(action.turnoverTicket).pipe(\n mergeMap(newTurnoverTicket => [addNewTurnoverTicketSuccess({ newTurnoverTicket })]),\n tap(() => {\n this.snackbarService.success(SnackbarErrorMessage.TicketCreated);\n }),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.CreatingTicket);\n return of(addNewTurnoverTicketFailed());\n })\n );\n })\n )\n );\n\n updateTurnoverTicket$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateTurnoverTicket),\n mergeMap(action =>\n this.ticketsService.update(action.turnoverTicket).pipe(\n mergeMap(editedTicket => [\n updateTurnoverTicketSuccess({ editedTicket }),\n getTurnoverTickets({ turnoverId: editedTicket.turnoverId }),\n ]),\n tap(() => {\n this.snackbarService.info(SnackbarErrorMessage.TicketUpdated);\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingTurnoverTicket);\n return of(updateTurnoverTicketFailed());\n })\n )\n )\n )\n );\n updateTurnoverTicketPreview$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateTicketPreview),\n mergeMap(action =>\n this.ticketsService.update(action.turnoverTicket).pipe(\n mergeMap(editedTicket => [updateTicketPreviewSuccess({ editedTicket })]),\n tap(() => {\n this.snackbarService.info(SnackbarErrorMessage.TicketUpdated);\n }),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingTicket);\n return of(updateTicketPreviewFailed());\n })\n )\n )\n )\n );\n\n getTurnoverTicket$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getSelectedTicket),\n switchMap(action =>\n this.ticketsService.getTicket(action.ticketId).pipe(\n map(ticket => getSelectedTicketSuccess({ ticket })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTurnoverTicket);\n return of(getSelectedTicketFailed());\n })\n )\n )\n )\n );\n\n deleteTurnoverTicket$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteTurnoverTicket),\n withLatestFrom(this.store.select(selectTurnoverData)),\n mergeMap(([action, turnoverData]) =>\n this.ticketsService.delete(action.ticketId).pipe(\n mergeMap(() => [deleteTurnoverTicketSuccess(), getTurnoverTickets({ turnoverId: turnoverData.id })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingTicket);\n return of(deleteTurnoverTicketFailed());\n })\n )\n )\n )\n );\n\n setTicketAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setTicketAttachment),\n mergeMap(action =>\n this.ticketsService.setAttachment(action.attachmentToEntity).pipe(\n mergeMap(addedTicketAttachment => [\n setTicketAttachmentSuccess({ addedTicketAttachment }),\n action.ticketType === TicketType.Ticket\n ? getSelectedTicket({ ticketId: action.attachmentToEntity.ticketId })\n : loadPunchById({ punchId: action.attachmentToEntity.ticketId }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AssigningAttachmentToTicket);\n return of(setTicketAttachmentFail());\n })\n )\n )\n )\n );\n\n getTicket$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTicket),\n switchMap(action =>\n this.ticketsService.getTicket(action.ticketId).pipe(\n map((restTicketModel: RestTicketModel) => getTicketSuccess({ restTicketModel })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTicket);\n return of(getTicketFailed());\n })\n )\n )\n )\n );\n\n getTicketAttachments$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTicketAttachments),\n switchMap(action =>\n this.ticketsService.getTicketAttachment(action.ticketId).pipe(\n map((attachments: RestTypedTicketAttachment[]) =>\n getTicketAttachmentsSuccess({ ticketAttachments: attachments || [] })\n ),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTicketAttachment);\n return of(getTicketAttachmentsFailed());\n })\n )\n )\n )\n );\n\n getCompanyList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getCompanyList),\n exhaustMap(action =>\n this.companiesService.getCompanyList().pipe(\n map(companyList => getCompanyListSuccess({ companyList })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingCompaniesList);\n return of(getCompanyListFail());\n })\n )\n )\n )\n );\n\n getBidTurnoverList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getBidTurnoverList),\n switchMap(action =>\n this.bidsService.getTurnoverBids(action.turnoverId).pipe(\n map(bidList => getBidTurnoverListSuccess({ bidList })),\n catchError(ex => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBidList);\n return of(getBidTurnoverListFail());\n })\n )\n )\n )\n );\n\n getBidCompanyList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getBidCompanyList),\n switchMap(action =>\n this.bidsService.getCompanyBids(action.companyId).pipe(\n map(bidList => getBidCompanyListSuccess({ bidList })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingVendorsList);\n return of(getBidCompanyListFail());\n })\n )\n )\n )\n );\n\n getAllBidList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getAllBidList),\n switchMap(action =>\n this.bidsService.getAllBids().pipe(\n map(list => getAllBidListSuccess({ bidList: list || [] })),\n catchError(ex => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBidList);\n return of(getAllBidListFail());\n })\n )\n )\n )\n );\n\n getBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getBid),\n switchMap(action =>\n this.bidsService.getBid(action.bidId).pipe(\n map(bid => getBidSuccess({ bid })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBid);\n return of(getBidFail());\n })\n )\n )\n )\n );\n\n addNewBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addNewBid),\n mergeMap(action =>\n this.bidsService.create(action.bidList).pipe(\n map(newBidList => addNewBidSuccess({ newBidList })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AddingBid);\n return of(addNewBidFail());\n })\n )\n )\n )\n );\n\n rejectBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(rejectBid),\n mergeMap(action =>\n this.bidsService.reject(action.id).pipe(\n mergeMap(updatedBid => [\n rejectBidSuccess({ updatedBid }),\n getBidTurnoverList({ turnoverId: first(updatedBid.turnoverIds) }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingBid);\n return of(rejectBidFail());\n })\n )\n )\n )\n );\n\n updateBid$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateBid),\n mergeMap(action =>\n this.bidsService.update(action.bid).pipe(\n mergeMap(updatedBid => [updateBidSuccess({ updatedBid })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingBid);\n return of(updateBidFail());\n })\n )\n )\n )\n );\n\n updateBidComment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateBidComment),\n mergeMap(action =>\n this.bidsService.update(action.bid).pipe(\n map(updatedBid => updateBidCommentSuccess({ updatedBid })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingBid);\n return of(updateBidCommentFail());\n })\n )\n )\n )\n );\n\n setBidAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setBidAttachment),\n mergeMap(action =>\n this.bidsService.setAttachment(action.attachmentToEntity).pipe(\n mergeMap((addedBidAttachment: RestTypedBidAttachment) => [\n setBidAttachmentSuccess({ addedBidAttachment }),\n getBidAttachmentList({ bidId: action.attachmentToEntity.bidId }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AssigningAttachmentToBid);\n return of(setBidAttachmentFail());\n })\n )\n )\n )\n );\n\n getAppliance$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getAppliance),\n switchMap(action =>\n this.appliancesService.getAppliance(action.applianceId).pipe(\n map(appliance => getApplianceSuccess({ appliance })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingApplianceData);\n return of(getApplianceFailed());\n })\n )\n )\n )\n );\n\n getWorkflowStepCommentList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getWorkflowStepCommentList),\n switchMap(action =>\n this.workflowStepCommentsService.getWorkflowStepComments(action.turnoverId).pipe(\n map(workflowStepCommentList => getWorkflowStepCommentListSuccess({ workflowStepCommentList })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ReceivingTurnoverComments);\n return of(getWorkflowStepCommentListFailed());\n })\n )\n )\n )\n );\n\n addWorkflowStepComment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addWorkflowStepComment),\n mergeMap(action =>\n this.workflowStepCommentsService.create(action.commentItem).pipe(\n mergeMap(commentItem => [\n addWorkflowStepCommentSuccess({ commentItem }),\n getWorkflowStepCommentList({ turnoverId: commentItem.turnoverDataId }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.AddingComment);\n return of(addWorkflowStepCommentFailed());\n })\n )\n )\n )\n );\n\n updateWorkflowStepComment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateWorkflowStepComment),\n mergeMap(action =>\n this.workflowStepCommentsService.update(action.commentItem).pipe(\n mergeMap(commentItem => [\n updateWorkflowStepCommentSuccess({ commentItem }),\n getWorkflowStepCommentList({ turnoverId: commentItem.turnoverDataId }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingComment);\n return of(updateWorkflowStepCommentFailed());\n })\n )\n )\n )\n );\n\n deleteWorkflowStepComment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteWorkflowStepComment),\n mergeMap(action =>\n this.workflowStepCommentsService.delete(action.commentItem.id).pipe(\n mergeMap(workflowStepCommentList => [\n deleteWorkflowStepCommentSuccess(),\n getWorkflowStepCommentList({ turnoverId: action.commentItem.turnoverDataId }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.Deletingcomment);\n return of(deleteWorkflowStepCommentFailed());\n })\n )\n )\n )\n );\n\n loadWorkflowAssignmentsByPropertyAndStepId$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadWorkflowAssignmentsByPropertyAndStepId),\n switchMap(action =>\n this.responsiblePartiesService.getWorkflowAssignmentsByStepId(action.propertyId, action.stepId).pipe(\n map(workflowAssignment =>\n workflowAssignmentsByPropertyAndStepIdSucceded({\n workflowStepAssigneeId: workflowAssignment?.responsiblePartyId || null,\n })\n ),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingworkflowAssignment);\n return of(workflowAssignmentsByPropertyAndStepIdFailure());\n })\n )\n )\n )\n );\n\n deleteTurnover$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteTurnover),\n mergeMap(action =>\n this.turnoversService.deleteTurnover(action.turnoverId).pipe(\n map(workflowAssignment => deleteTurnoverSuccess()),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingTurnover);\n return of(deleteTurnoverFailed());\n })\n )\n )\n )\n );\n\n deleteTurnoverAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteTurnoverAttachment),\n withLatestFrom(this.store.select(selectTurnoverData)),\n mergeMap(([action, turnoverData]) =>\n this.turnoversService.deleteTurnoverAttachment(turnoverData.id, action.attachment.id).pipe(\n switchMap(() =>\n iif(\n () => !!action.attachment?.fileUploadId,\n of(action.attachment?.fileUploadId).pipe(\n map((fileId: number) => deleteFileFromRepository({ fileId: action.attachment?.fileUploadId }))\n ),\n of(turnoverData.id).pipe(map((turnoverId: number) => deleteFileFromRepositorySuccess()))\n )\n ),\n mergeMap(() => [deleteTurnoverAttachmentSuccess(), getTurnoverAttachments({ turnoverId: turnoverData.id })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingAttachment);\n return of(deleteFileFromRepositoryFailed());\n })\n )\n )\n )\n );\n\n deleteTurnoverTicketAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteTurnoverTicketAttachment),\n mergeMap(action =>\n this.ticketsService.deleteTurnoverAttachment(action.ticketId, action.attachment.id).pipe(\n switchMap(() =>\n iif(\n () => !!action.attachment?.fileUploadId,\n of(action.attachment?.fileUploadId).pipe(map((fileId: number) => deleteFileFromRepository({ fileId }))),\n of(null)\n )\n ),\n mergeMap(() => [\n deleteTurnoverTicketAttachmentSuccess(),\n action.ticketType === TicketType.Ticket\n ? getTicket({ ticketId: action.ticketId })\n : loadPunchById({ punchId: action.ticketId }),\n ]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingAttachment);\n return of(deleteTurnoverTicketAttachmentFailed());\n })\n )\n )\n )\n );\n\n deleteFileFromRepository$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteFileFromRepository),\n mergeMap(action =>\n this.fileUploadsService.removeFile(action.fileId).pipe(\n map(() => deleteFileFromRepositorySuccess()),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingFileFromRepository);\n return of(deleteFileFromRepositoryFailed());\n })\n )\n )\n )\n );\n\n getTurnoverAttachments$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTurnoverAttachments),\n mergeMap(action =>\n this.turnoversService.getTurnoversAttachments(action.turnoverId).pipe(\n map((attachments: RestGenericTypedAttachment[]) =>\n getTurnoverAttachmentsSuccess({ allAttachments: attachments || [] })\n ),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTurnoverAttachmentList);\n return of(getTurnoverAttachmentsFailed());\n })\n )\n )\n )\n );\n\n getBidAttachmentList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getBidAttachmentList),\n mergeMap(action =>\n this.bidsService.getBidAttachments(action.bidId).pipe(\n map((attachments: RestGenericTypedAttachment[]) =>\n getBidAttachmentListSuccess({ allAttachments: attachments || [] })\n ),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingBidAttachmentList);\n return of(getBidAttachmentListFailed());\n })\n )\n )\n )\n );\n\n deleteBidAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteBidAttachment),\n mergeMap(action =>\n this.bidsService.deleteBidAttachment(action.bidId, action.attachment.id).pipe(\n switchMap(() =>\n iif(\n () => !!action.attachment?.fileUploadId,\n of(action.attachment?.fileUploadId).pipe(map((fileId: number) => deleteFileFromRepository({ fileId }))),\n of(null)\n )\n ),\n mergeMap(() => [deleteBidAttachmentSuccess(), getBidAttachmentList({ bidId: action.bidId })]),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingAttachment);\n return of(deleteBidAttachmentFailed());\n })\n )\n )\n )\n );\n\n toggleAllSections$ = createEffect(() =>\n this.actions$.pipe(\n ofType(toggleAllSections),\n withLatestFrom(this.store.select(selectAllPropertyIds)),\n mergeMap(([action, allPropertyIds]) =>\n this.turnoversService\n .toggleAllSections(allPropertyIds, action.active)\n .pipe(map(activePropertyIds => setActiveSections({ activePropertyIds })))\n )\n )\n );\n\n toggleSingleSection$ = createEffect(() =>\n this.actions$.pipe(\n ofType(toggleSingleSection),\n withLatestFrom(this.store.select(selectActivePropertyIds)),\n mergeMap(([action, activePropertyIds]) =>\n this.turnoversService\n .toggleSingleSection(activePropertyIds, action.propertyId, action.active)\n .pipe(map(activePropertyIds => setActiveSections({ activePropertyIds })))\n )\n )\n );\n\n toggleInactiveFilteredSingleSection$ = createEffect(() =>\n this.actions$.pipe(\n ofType(toggleInactiveFilteredSingleSection),\n withLatestFrom(this.store.select(selectInactiveFilteredPropertyIds)),\n mergeMap(([action, selectInactiveFilteredPropertyIds]) =>\n this.turnoversService\n .toggleSingleSection(selectInactiveFilteredPropertyIds, action.propertyId, action.active)\n .pipe(map(inactiveFilteredPropertyIds => setInactiveFilteredSections({ inactiveFilteredPropertyIds })))\n )\n )\n );\n\n resetInactiveFilteredSections$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setTurnoversFilters, resetTurnoversFilters),\n map(() => setInactiveFilteredSections({ inactiveFilteredPropertyIds: [] }))\n )\n );\n\n loadTurnoverTimers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadTurnoverTimers),\n mergeMap(action =>\n this.turnoversService.getTurnoversTimers(action.turnoverId).pipe(\n map(timers => turnoverTimersLoaded({ turnoverId: action.turnoverId, timers })),\n catchError(() => {\n return of(setTurnoverTimersFailed());\n })\n )\n )\n )\n );\n\n setTurnoverTimers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setTurnoverTimers),\n mergeMap(action =>\n this.turnoversService.updateTurnoversTimers(action.turnoverId, action.timers).pipe(\n map(() => setTurnoverTimersSuccess()),\n catchError(() => {\n this.snackbarService.error('Timer update failed');\n return of(setTurnoverTimersFailed());\n })\n )\n )\n )\n );\n\n setWorkflowStepAssignee$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setWorkflowStepAssignee),\n mergeMap(action =>\n this.workflowActionsService.setWorkflowStepAssignee(action.turnoverId, action.step, action.assigneeId).pipe(\n mergeMap(() => [\n setWorkflowStepAssigneeSuccess(),\n getWorkflowStepCommentList({ turnoverId: action.turnoverId }),\n ]),\n catchError(() => {\n return of(setWorkflowStepAssigneeFailed());\n })\n )\n )\n )\n );\n\n setEmptyWorkflowStepAssignee$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setEmptyWorkflowStepAssignee),\n mergeMap(action =>\n this.workflowActionsService.setWorkflowStepAssignee(action.turnoverId, action.step, action.assigneeId).pipe(\n mergeMap(() => [getTurnoverData({ ...action })]),\n catchError(() => {\n return of(setWorkflowStepAssigneeFailed());\n })\n )\n )\n )\n );\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestBidModel } from '@shared/interfaces/bid.interface';\nimport { RestBulkScopeAndBidModel } from '@shared/interfaces/rest-bulk-scope-and-bid-model';\n\nimport {\n addUnitsToBulk,\n addUnitsToBulkSuccess,\n createNewBulkScope,\n createNewBulkScopeFailed,\n createNewBulkScopeSuccess,\n getBulkScope,\n getBulkScopeFailed,\n getBulkScopeList,\n getBulkScopeListFailed,\n getBulkScopeListSuccess,\n getBulkScopeSuccess,\n resetNewBulkScopeID,\n resetUpdateBulkScopeStatus,\n updateBulkScope,\n updateBulkScopeFailed,\n updateBulkScopeSuccess,\n} from '../actions/bulk-and-scope.actions';\n\nexport const bulkBidsFeatureKey = 'bulk-bids';\n\nexport interface State {\n newBulkScopeInProgress: boolean;\n newBulkScopeInStatus: UpdateStatus;\n newBulkScopeInId: number;\n\n bulkScopeLoading: boolean;\n bulkScope: RestBulkScopeAndBidModel;\n\n bulkScopeListLoading: boolean;\n bulkScopeList: RestBulkScopeAndBidModel[];\n\n updateBulkScopeInProgress: boolean;\n updateBulkScopeInStatus: UpdateStatus;\n\n allBidList: RestBidModel[];\n allBidListLoading: boolean;\n\n addUnitsInProgress: boolean;\n}\n\nexport const initialState: State = {\n newBulkScopeInProgress: false,\n newBulkScopeInStatus: null,\n newBulkScopeInId: null,\n\n bulkScopeLoading: false,\n bulkScope: null,\n\n bulkScopeListLoading: false,\n bulkScopeList: [],\n\n updateBulkScopeInProgress: false,\n updateBulkScopeInStatus: null,\n\n allBidList: [],\n allBidListLoading: false,\n addUnitsInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n\n /**\n * Create new bulk scope\n */\n on(createNewBulkScope, (state, action) => ({\n ...state,\n newBulkScopeInProgress: true,\n newBulkScopeInStatus: UpdateStatus.UPDATE,\n newBulkScopeInId: null,\n })),\n on(createNewBulkScopeSuccess, (state, action) => ({\n ...state,\n newBulkScopeInProgress: false,\n newBulkScopeInStatus: UpdateStatus.OK,\n newBulkScopeInId: action.bulkScopeId,\n })),\n on(createNewBulkScopeFailed, (state, action) => ({\n ...state,\n newBulkScopeInProgress: false,\n newBulkScopeInStatus: UpdateStatus.ERROR,\n newBulkScopeInId: null,\n })),\n on(resetNewBulkScopeID, (state, action) => ({\n ...state,\n newBulkScopeInId: null,\n })),\n\n /**\n * get bulk scope\n */\n on(getBulkScope, (state, action) => ({\n ...state,\n bulkScopeLoading: true,\n })),\n on(getBulkScopeSuccess, (state, action) => ({\n ...state,\n bulkScope: action.bulkScope,\n bulkScopeLoading: false,\n })),\n on(getBulkScopeFailed, (state, action) => ({\n ...state,\n bulkScope: null,\n bulkScopeLoading: false,\n })),\n /**\n * get bulk scope list\n */\n on(getBulkScopeList, (state, action) => ({\n ...state,\n bulkScopeListLoading: true,\n })),\n on(getBulkScopeListSuccess, (state, action) => ({\n ...state,\n bulkScopeList: action.bulkList,\n bulkScopeListLoading: false,\n })),\n on(getBulkScopeListFailed, (state, action) => ({\n ...state,\n bulkScopeList: [],\n bulkScopeListLoading: false,\n })),\n\n /**\n * update bulk scope\n */\n on(updateBulkScope, (state, action) => ({\n ...state,\n updateBulkScopeInStatus: UpdateStatus.UPDATE,\n updateBulkScopeInProgress: true,\n })),\n on(updateBulkScopeSuccess, (state, action) => ({\n ...state,\n updateBulkScopeInStatus: UpdateStatus.OK,\n updateBulkScopeInProgress: false,\n })),\n on(updateBulkScopeFailed, (state, action) => ({\n ...state,\n updateBulkScopeInStatus: UpdateStatus.ERROR,\n updateBulkScopeInProgress: false,\n })),\n on(resetUpdateBulkScopeStatus, (state, action) => ({\n ...state,\n updateBulkScopeInStatus: null,\n })),\n\n /**\n * add units to bulk\n */\n on(addUnitsToBulk, (state, action) => ({\n ...state,\n addUnitsInProgress: true,\n })),\n on(addUnitsToBulkSuccess, updateBulkScopeFailed, (state, action) => ({\n ...state,\n addUnitsInProgress: false,\n }))\n);\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { KpiEffects } from '@dashboards/effects/kpi.effects';\nimport { AdministrationEffects } from '@main-application/administration/effects/administration.effects';\nimport * as fromAdministration from '@main-application/administration/reducers/administration.reducer';\nimport { SystemConfigurationEffects } from '@main-application/management/components/system-configuration/store/system-configuration.effects';\nimport * as fromSystemConfiguration from '@main-application/management/components/system-configuration/store/system-configuration.reducer';\nimport { TurnoverConfigurationStoreModule } from '@main-application/management/components/turnover-configuration/store/turnover-configuration-store.module';\nimport { BulkBidsEffects } from '@main-application/turnovers/effects/bulk-bids.effects';\nimport { PunchEffects } from '@main-application/turnovers/effects/punch.effects';\nimport { TurnoverBidsEffects } from '@main-application/turnovers/effects/turnover-bids.effects';\nimport { TurnoversEffects } from '@main-application/turnovers/effects/turnovers.effects';\nimport * as fromBulkBids from '@main-application/turnovers/reducers/bulk-bids.reducer';\nimport * as fromPunch from '@main-application/turnovers/reducers/punch.reducer';\nimport {\n turnoverBidsFeatureKey,\n turnoverBidsReducer,\n} from '@main-application/turnovers/reducers/turnover-bids.reducer';\nimport * as fromTurnovers from '@main-application/turnovers/reducers/turnovers.reducer';\nimport { PortfolioStoreModule } from '@portfolio/store/portfolio-store.module';\nimport { TemplateStoreModule } from '@template/store/template-store.module';\n\nimport { DashboardEffects } from './effects/dashboard.effects';\nimport * as fromDashboardFilterReducer from './reducers/dashboard-filter.reducer';\nimport { metaDashboardFilterReducers } from './reducers/dashboard-filter.reducer';\nimport * as fromDashboardsReducer from './reducers/dashboards.reducer';\nimport { metaDashboardReducers } from './reducers/dashboards.reducer';\nimport * as fromDashboardKpiReducer from './reducers/kpi.reducer';\nimport { metaDashboardKpiReducers } from './reducers/kpi.reducer';\nimport * as fromDashboardFilterTransient from './store';\n\n@NgModule({\n exports: [],\n imports: [\n PortfolioStoreModule,\n TurnoverConfigurationStoreModule,\n TemplateStoreModule,\n EffectsModule.forFeature([\n DashboardEffects,\n KpiEffects,\n AdministrationEffects,\n TurnoversEffects,\n BulkBidsEffects,\n PunchEffects,\n SystemConfigurationEffects,\n TurnoverBidsEffects,\n ]),\n StoreModule.forFeature(fromSystemConfiguration.systemConfigurationFeatureKey, fromSystemConfiguration.reducer),\n StoreModule.forFeature(fromDashboardsReducer.dashboardsFeatureKey, fromDashboardsReducer.reducer, {\n metaReducers: metaDashboardReducers,\n }),\n StoreModule.forFeature(fromDashboardKpiReducer.kpiFeatureKey, fromDashboardKpiReducer.reducer, {\n metaReducers: metaDashboardKpiReducers,\n }),\n StoreModule.forFeature(fromDashboardFilterReducer.dashboardFilterFeatureKey, fromDashboardFilterReducer.reducer, {\n metaReducers: metaDashboardFilterReducers,\n }),\n StoreModule.forFeature(fromAdministration.administrationFeatureKey, fromAdministration.reducer),\n StoreModule.forFeature(fromTurnovers.turnoversFeatureKey, fromTurnovers.reducer),\n StoreModule.forFeature(fromBulkBids.bulkBidsFeatureKey, fromBulkBids.reducer),\n StoreModule.forFeature(fromPunch.punchFeatureKey, fromPunch.reducer),\n StoreModule.forFeature(\n fromDashboardFilterTransient.dashboardFilterTransientFeatureKey,\n fromDashboardFilterTransient.reducer\n ),\n StoreModule.forFeature(turnoverBidsFeatureKey, turnoverBidsReducer),\n ],\n declarations: [],\n})\nexport class SharedStoreModule {}\n","import { createAction, createFeatureSelector, createReducer, createSelector, on, props } from '@ngrx/store';\n\nimport { TurnoverAuditMode } from '@shared/enums/turnover-audit-mode';\nimport { TurnoversFilters } from '@shared/interfaces/turnovers-filters.interface';\n\nexport const dashboardFilterTransientFeatureKey = 'dashboardFilterTransient';\n\nexport const selectDashboardsStateTransient = createFeatureSelector(\n dashboardFilterTransientFeatureKey\n);\n\n/**\n * dashboards filters\n */\nexport const selectTurnoversFilters = createSelector(\n selectDashboardsStateTransient,\n dashboardsState => dashboardsState.turnoversFilters\n);\n\nexport interface DashboardsStateTransient {\n turnoversFilters: TurnoversFilters;\n}\n\n/**\n * set turnovers filters\n */\nexport const setTurnoversFilters = createAction(\n '[Dashboard] set turnovers filters',\n props<{ turnoversFilters: TurnoversFilters }>()\n);\n\nexport const resetTurnoversFilters = createAction('[Dashboard] reset turnovers filters');\n\nexport const initialState: DashboardsStateTransient = {\n turnoversFilters: {\n auditMode: TurnoverAuditMode.ELAPSED_DAYS,\n },\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * turnovers filters\n */\n on(setTurnoversFilters, (state, action) => ({\n ...state,\n turnoversFilters: action.turnoversFilters,\n })),\n on(resetTurnoversFilters, (state, action) => ({\n ...state,\n turnoversFilters: initialState.turnoversFilters,\n }))\n);\n","import { RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nexport interface RestInspectionCreateModel {\n inspectionTemplateId: number;\n unitId: number;\n assignee: number;\n dueDate: Date;\n notifyAssignee: boolean;\n turboMode: boolean;\n}\n\nexport interface RestInspectionsModel {\n id: number;\n inspectionTemplateId: number;\n unitId: number;\n unit: RestUnitSummaryModel;\n assignee: number;\n assigneeUser: RestUserModel;\n status: InspectionStatus;\n inspectionContents?: RestInspectionContents[];\n completedAt: Date;\n modifiedAt: Date;\n createdAt: Date;\n dueDate: Date;\n calendarPosition: number;\n inspectionType: InspectionType;\n isTurboMode?: boolean;\n attachments?: {\n attachment?: RestTypedInspectionAttachment;\n none: RestTypedInspectionAttachment[];\n };\n totalRooms?: number;\n completedRooms?: number;\n}\n\nexport interface RestTypedInspectionAttachment {\n id: number;\n dateCreated: string;\n dateUpdated: string;\n isActive: boolean;\n fileUploadId: number;\n internalName: string;\n originalFileName: string;\n size: number;\n url: string;\n attachmentTypeUrn: string;\n title: string;\n description: string;\n externalUrl: string;\n inspectionAttachmentType: number;\n trueType: number;\n}\n\nexport interface RestInspectionContents {\n id: number;\n inspectionId: number;\n inspectionTemplateAreaId: number;\n sharedInspectionLibrarySpaceId: number;\n status: InspectionItemStatus;\n surveyJSON: string;\n answerJSON: string;\n inspectionTemplateAreaTitle: string;\n}\n\nexport interface SendInspectionReportRequest {\n to: string[];\n subject: string;\n mody: string;\n}\n\nexport enum InspectionStatus {\n NotStarted,\n InProgress,\n Completed,\n Cancelled,\n}\n\nexport enum InspectionItemStatus {\n Incompleted,\n Skipped,\n Completed,\n}\n\nexport enum InspectionType {\n MoveOutVacant,\n Annual,\n MaintenanceCheck,\n MoveIn,\n CustomInspection,\n Periodic,\n MoveOutOccupied,\n Diligence,\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, first, map, mergeMap, tap } from 'rxjs';\n\nimport { RestapiServiceWithoutTimezone } from '@app/services/restapi.service';\n\nimport { RestTimezone } from './model/timezone';\nimport { TimezoneHelper } from '../timezone.helper';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimezoneService {\n private wasInitilized = false;\n private readonly currentTimezone = new ReplaySubject(1);\n public readonly currentTimezone$ = this.currentTimezone.asObservable().pipe(first());\n private currentTimezoneValue = 0;\n constructor(private service: RestapiServiceWithoutTimezone) {}\n\n getPms(): Observable {\n return this.service.getData('system/pmsInfo');\n }\n\n getList(): Observable {\n return this.service.getData('system/getTimezones');\n }\n\n set(value: RestTimezone) {\n this.wasInitilized = true;\n this.currentTimezoneValue = value.utcOffsetMinutes;\n this.currentTimezone.next(this.currentTimezoneValue);\n return this.service.post('system/setTimezone?timeZoneId=' + value.id);\n }\n\n get() {\n this.wasInitilized = true;\n return this.service.getData('system/getSelectedTimezone').pipe(\n tap(value => {\n this.currentTimezoneValue = value.utcOffsetMinutes;\n this.currentTimezone.next(this.currentTimezoneValue);\n })\n );\n }\n\n getCurrentDateOnly() {\n return new Date(this.getCurrentDate().toDateString());\n }\n\n getCurrentDate() {\n return TimezoneHelper.replaceTimezoneToClient(new Date(), this.currentTimezoneValue);\n }\n\n addTimezoneForEntity(f: (entity: T, timezone: number) => T) {\n if (!this.wasInitilized) {\n this.get().subscribe();\n }\n return mergeMap((data: T) => this.currentTimezone$.pipe(map(timezone => f(data, timezone))));\n }\n}\n","import { TimezoneHelper } from './timezone.helper';\n\nexport type TimezoneConversionFunction = (data: T, timezone: number) => T;\n\nexport class TimezoneEntityHelperCommon {\n /**\n * Change timezone for date feilds of data before sending to server\n *\n * @param data - object\n * @param timezone - local timezone of Client app\n * @param vanilaDates - array of fields that should contain vanila date without time part\n * @param nestedObjects - array of fields that contain complicated objects that should use custom function for field correction\n */\n public static readonly fixTimezoneForModelToServer = (\n data: T,\n timezone: number,\n vanilaDates: (keyof T)[] = [],\n nestedObjects: { field: keyof T; f: TimezoneConversionFunction }[] = []\n ) => {\n if (!data || (typeof data !== 'object' && !Array.isArray(data))) {\n return data;\n }\n const dataWithoutTimezone = Array.isArray(data) ? ([...data] as T) : { ...data };\n for (const field in dataWithoutTimezone) {\n if (nestedObjects.some(e => e.field == field)) {\n dataWithoutTimezone[field] = nestedObjects\n .find(e => e.field == field)\n .f(dataWithoutTimezone[field], timezone) as any;\n } else if (vanilaDates.includes(field)) {\n dataWithoutTimezone[field] = TimezoneHelper.removeTimeZone(dataWithoutTimezone[field] as Date) as any;\n } else if (\n dataWithoutTimezone[field] instanceof Date ||\n this.isStringLikeServerDate(dataWithoutTimezone[field])\n ) {\n dataWithoutTimezone[field] = TimezoneHelper.replaceTimezoneToServer(\n dataWithoutTimezone[field] as Date,\n timezone\n ) as any;\n } else if (typeof dataWithoutTimezone[field] === 'object') {\n dataWithoutTimezone[field] = this.fixTimezoneForModelToServer(dataWithoutTimezone[field], timezone, [], []);\n }\n }\n return dataWithoutTimezone;\n };\n\n /**\n * Change timezone for date feilds of data that was just received from server\n *\n * @param data - object\n * @param timezone - local timezone of Client app\n * @param vanilaDates - array of fields that should contain vanila date without time part\n * @param nestedObjects - array of fields that contain complicated objects that should use custom function for field correction\n */\n public static readonly fixTimezoneForModelToClient = (\n data: T,\n timezone: number,\n vanilaDates: (keyof T)[] = [],\n nestedObjects: { field: keyof T; f: TimezoneConversionFunction }[] = []\n ) => {\n if (!data) return data;\n for (const field in data) {\n if (nestedObjects.some(e => e.field == field)) {\n nestedObjects.find(e => e.field == field).f(data[field], timezone) as any;\n } else if (vanilaDates.includes(field)) {\n data[field] = TimezoneHelper.addTimeZoneAndKeepOnlyDatePart(data[field] as Date) as any;\n } else if (data[field] instanceof Date || this.isStringLikeServerDate(data[field])) {\n data[field] = TimezoneHelper.replaceTimezoneToClient(data[field] as Date, timezone) as any;\n } else if (typeof data[field] === 'object') {\n this.fixTimezoneForModelToClient(data[field], timezone, [], []);\n }\n }\n return data;\n };\n\n private static isStringLikeServerDate(dateString: any) {\n return (\n typeof dateString === 'string' &&\n /^[0-9]{4}-[01][0-9]-[0-3][0-9]T[0-5][0-9]:[0-5][0-9]:[0-5][0-9](\\.[0-9][0-9]?)?Z$/.test(dateString)\n //Valid examples of server date string:\n //2023-07-06T00:00:00Z\n //2023-07-06T09:37:48.2Z\n //2023-07-06T09:37:21.85Z\n );\n }\n}\n","import { RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport { RestInspectionsModel } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { RestArchivedTurnover, RestTurnoverDataModel } from '@shared/interfaces/turnover.interface';\n\nimport { TimezoneEntityHelperCommon } from './timezone-entity-common.helper';\nimport { TimezoneHelper } from './timezone.helper';\n\nexport class TimezoneEntityHelper extends TimezoneEntityHelperCommon {\n public static readonly fixTimezoneForRestInspectionsModelToClient = (\n data: RestInspectionsModel,\n timezone: number\n ) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['dueDate']);\n };\n public static readonly fixTimezoneForRestInspectionsModelToServer = (\n data: RestInspectionsModel,\n timezone: number\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, ['dueDate']);\n };\n public static readonly fixTimezoneForTurnStepScheduleModelToClient = (\n data: RestTurnStepScheduleModel,\n timezone: number\n ) => {\n return super.fixTimezoneForModelToClient(data, timezone, [\n 'dueDate',\n 'originalDueDate',\n 'turnoverDateAvailable',\n 'dateCompleted',\n ]);\n };\n public static readonly fixTimezoneForTurnStepScheduleModelToServer = (\n data: RestTurnStepScheduleModel,\n timezone: number\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, [\n 'dueDate',\n 'originalDueDate',\n 'turnoverDateAvailable',\n 'dateCompleted',\n ]);\n };\n public static readonly fixTimezoneForArchivedTurnoverDataModelToClient = (\n //Has no idea what this function for, maybe should be deleted?\n data: RestArchivedTurnover,\n timezone: number\n ) => {\n return this.fixTimezoneForArchivedTurnoverDataModel(\n data,\n timezone,\n TimezoneHelper.addTimeZoneAndKeepOnlyDatePart,\n TimezoneHelper.replaceTimezoneToClient,\n this.fixTimezoneForModelToClient\n );\n };\n public static readonly fixTimezoneForTurnoverDataModelToClient = (data: RestTurnoverDataModel, timezone: number) => {\n return super.fixTimezoneForModelToClient(\n data,\n timezone,\n ['dateMoveIn', 'dateMoveOut', 'pmsMoveOutDate', 'lastRentDate', 'dateAvailable', 'leaseExecutionDate'],\n [\n {\n field: 'turnStepSchedules',\n f: (list: RestTurnStepScheduleModel[], tz) => {\n list.forEach(e => this.fixTimezoneForTurnStepScheduleModelToClient(e, tz));\n return list;\n },\n },\n ]\n );\n };\n public static readonly fixTimezoneForTurnoverDataModelToServer = (data: RestTurnoverDataModel, timezone: number) => {\n return super.fixTimezoneForModelToServer(\n data,\n timezone,\n ['dateMoveIn', 'dateMoveOut', 'pmsMoveOutDate', 'lastRentDate', 'dateAvailable', 'leaseExecutionDate'],\n [\n {\n field: 'turnStepSchedules',\n f: (list: RestTurnStepScheduleModel[], tz) => {\n list.forEach(e => this.fixTimezoneForTurnStepScheduleModelToClient(e, tz));\n return list;\n },\n },\n ]\n );\n };\n\n public static readonly fixTimezoneForArchivedTurnoverDataModel = (\n data: RestArchivedTurnover,\n timezone: number,\n fVanila: (date: Date | string) => Date,\n fFullDate: (date: Date | string, timezone: number) => Date,\n fModel: (data: T, timezone: number) => T\n ) => {\n if (!data) return data;\n //Vanile Date\n data.turnoverStartDate = fFullDate(data.turnoverStartDate, timezone);\n data.turnoverEndDate = fFullDate(data.turnoverEndDate, timezone);\n return data;\n };\n}\n","export class TimezoneHelper {\n /**\n * Remove timezone & time part before sending value to server\n */\n static removeTimeZone(date: Date | string): Date {\n if (!date) {\n return null;\n }\n const convertedDate = new Date(date);\n return new Date(+convertedDate - convertedDate.getTimezoneOffset() * 60 * 1000);\n }\n /**\n * Add timezone for data which came from server, also remove timepart if it was\n */\n static addTimeZoneAndKeepOnlyDatePart(date: Date | string): Date {\n if (!date) {\n return null;\n }\n const convertedDate = new Date(date);\n const correctedDate = new Date(+convertedDate + convertedDate.getTimezoneOffset() * 60 * 1000);\n return new Date(correctedDate.toDateString());\n }\n /**\n * Change timezone for data that was just received from server\n *\n * @param date - date\n * @param newTimezone - timezone shift in seconds\n * @param oldTimezone - timezone shift in seconds\n */\n static replaceTimezoneToClient(date: Date | string, newTimezone: number = null, oldTimezone: number = null): Date {\n if (newTimezone == null) {\n newTimezone = 0;\n }\n if (oldTimezone == null) {\n oldTimezone = -new Date(date).getTimezoneOffset();\n }\n return TimezoneHelper.replaceTimezone(date, newTimezone, oldTimezone);\n }\n /**\n * Change timezone for data before sending to server\n *\n * @param date - date\n * @param oldTimezone - timezone shift in seconds\n * @param newTimezone - timezone shift in seconds\n */\n static replaceTimezoneToServer(date: Date | string, oldTimezone: number = null, newTimezone: number = null): Date {\n if (oldTimezone == null) {\n oldTimezone = 0;\n }\n if (newTimezone == null) {\n newTimezone = -new Date(date).getTimezoneOffset();\n }\n return TimezoneHelper.replaceTimezone(date, newTimezone, oldTimezone);\n }\n /**\n * Change timezone for data for displaying\n *\n * @param date - date\n * @param newTimezone - timezone shift in seconds\n * @param oldTimezone - timezone shift in seconds\n */\n private static replaceTimezone(date: Date | string, newTimezone: number, oldTimezone: number): Date {\n if (!date) {\n return null;\n }\n const convertedDate = new Date(date);\n return new Date(+convertedDate + (newTimezone - oldTimezone) * 60 * 1000);\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { PmsCredentialModel } from '@shared/interfaces/pms-credential-model.interface';\nimport { RestChatHooksChannel } from '@shared/interfaces/rest-chat-hooks-channel';\nimport { RestTimerReport } from '@shared/interfaces/rest-timer-report';\n\n/**\n * get System Config\n */\nexport const getSystemConfig = createAction('[System Config] get System Config');\nexport const getSystemConfigSuccess = createAction(\n '[System Config] get System Config success',\n props<{ systemConfig: PmsCredentialModel[] }>()\n);\nexport const getSystemConfigError = createAction('[System Config] get System Config error');\n\n/**\n * update System Config\n */\nexport const updateSystemConfig = createAction(\n '[System Config] update System Config',\n props<{ pmsCredential: PmsCredentialModel }>()\n);\nexport const deleteSystemConfig = createAction('[System Config] delete System Config', props<{ id: number }>());\nexport const updateSystemConfigSuccess = createAction('[System Config] update System Config success');\nexport const updateSystemConfigError = createAction('[System Config] update System Config error');\n\n/**\n * Timer Report\n */\n\nexport const getTimerReport = createAction('[System Config] getTimerReport');\nexport const getTimerReportSuccess = createAction(\n '[System Config] getTimerReportSuccess',\n props<{ timerReport: RestTimerReport[] }>()\n);\nexport const getTimerReportError = createAction('[System Config] getTimerReportError');\n\n/**\n * chat hooks\n */\n\nexport const getChatChannels = createAction('[System Config] getChatChannels');\nexport const getChatChannelsSuccess = createAction(\n '[System Config] getChatChannelsSuccess',\n props<{ channels: RestChatHooksChannel[] }>()\n);\nexport const getChatChannelsError = createAction('[System Config] getChatChannelsError');\n\nexport const setPropertyChatChannels = createAction(\n '[System Config] setPropertyChatChannels',\n props<{ channelIds: string[]; propertyId: number }>()\n);\nexport const setPropertyChatChannelsSuccess = createAction('[System Config] setPropertyChatChannelsSuccess');\nexport const setPropertyChatChannelsError = createAction('[System Config] setPropertyChatChannelsError');\n\nexport const setSystemSectionExpanded = createAction(\n '[System Config] setSystemSectionExpanded',\n props<{ section: 'API' | 'Hooks' | 'DateTime' | 'TimerReport'; state: boolean }>()\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { PmsCredentialModel } from '@shared/interfaces/pms-credential-model.interface';\nimport { RestChatHooksChannel } from '@shared/interfaces/rest-chat-hooks-channel';\nimport { RestTimerReport } from '@shared/interfaces/rest-timer-report';\n\nimport {\n getChatChannelsSuccess,\n getSystemConfig,\n getSystemConfigError,\n getSystemConfigSuccess,\n getTimerReport,\n getTimerReportError,\n getTimerReportSuccess,\n setSystemSectionExpanded,\n updateSystemConfig,\n updateSystemConfigError,\n updateSystemConfigSuccess,\n} from './system-configuration.actions';\n\nexport const systemConfigurationFeatureKey = 'systemConfiguration';\n\nexport interface State {\n systemConfig: PmsCredentialModel[];\n systemConfigLoading: boolean;\n timerReportLoading: boolean;\n timerReport: RestTimerReport[];\n updateSystemStatus: UpdateStatus;\n updateSystemInProgress: boolean;\n chatHooksChannels: RestChatHooksChannel[];\n expandedSections: {\n API: boolean;\n Hooks: boolean;\n DateTime: boolean;\n TimerReport: boolean;\n };\n}\n\nexport const initialState: State = {\n systemConfig: null,\n systemConfigLoading: false,\n timerReportLoading: false,\n timerReport: null,\n updateSystemStatus: null,\n updateSystemInProgress: false,\n chatHooksChannels: [],\n expandedSections: {\n API: true,\n Hooks: false,\n DateTime: false,\n TimerReport: false,\n },\n};\n\nexport const reducer = createReducer(\n initialState,\n on(getSystemConfig, (state, action) => ({ ...state, systemConfigLoading: false })),\n on(getSystemConfigSuccess, (state, action) => ({\n ...state,\n systemConfigLoading: false,\n systemConfig: action.systemConfig,\n })),\n on(getSystemConfigError, (state, action) => ({\n ...state,\n systemConfigLoading: false,\n systemConfig: null,\n })),\n on(getTimerReport, (state, action) => ({ ...state, timerReportLoading: false })),\n on(getTimerReportSuccess, (state, action) => ({\n ...state,\n timerReportLoading: false,\n timerReport: action.timerReport,\n })),\n on(getTimerReportError, (state, action) => ({\n ...state,\n timerReportLoading: false,\n timerReport: null,\n })),\n\n on(updateSystemConfig, (state, action) => ({\n ...state,\n\n updateSystemStatus: UpdateStatus.IN_PROGRESS,\n updateSystemInProgress: true,\n })),\n on(updateSystemConfigSuccess, (state, action) => ({\n ...state,\n updateSystemStatus: UpdateStatus.UPDATED,\n updateSystemInProgress: false,\n })),\n on(updateSystemConfigError, (state, action) => ({\n ...state,\n updateSystemStatus: UpdateStatus.ERROR,\n updateSystemInProgress: false,\n })),\n on(getChatChannelsSuccess, (state, action) => ({\n ...state,\n chatHooksChannels: action.channels,\n })),\n on(setSystemSectionExpanded, (state, action) => ({\n ...state,\n expandedSections: {\n ...state.expandedSections,\n [action.section]: action.state,\n },\n }))\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\nimport { TurnoverConfigSection } from '@shared/interfaces/turnover-config.interface';\n\n/**\n * get turnover configuration list\n */\nexport const getTurnoverConfigurationList = createAction('[Management] get turnover configuration list');\nexport const getTurnoverConfigurationListSuccess = createAction(\n '[Management] get turnover configuration list success',\n props<{ turnoverConfig: TurnoverConfigSection[] }>()\n);\nexport const getTurnoverConfigurationListFailure = createAction('[Management] get turnover configuration list failure');\n\n/**\n * get turnover configuration by workflow type\n */\nexport const getTurnoverConfigurationByWorkflowStep = createAction(\n '[Management] get turnover configuration by workflow type',\n props<{ workflowStep: WorkflowStepEnumType }>()\n);\nexport const getTurnoverConfigurationByWorkflowStepSuccess = createAction(\n '[Management] get turnover configuration by workflow type success',\n props<{ turnoverConfig: TurnoverConfigSection }>()\n);\nexport const getTurnoverConfigurationByWorkflowStepFailure = createAction(\n '[Management] get turnover configuration by workflow type failure'\n);\n\n/**\n * update turnover field configuration\n */\nexport const updateTurnoverFieldConfiguration = createAction(\n '[Management] update turnover field configuration',\n props<{ turnoverConfig: TurnoverConfigSection }>()\n);\nexport const updateTurnoverFieldConfigurationSuccess = createAction(\n '[Management] update turnover field configuration success'\n);\nexport const updateTurnoverFieldConfigurationFailure = createAction(\n '[Management] update turnover field configuration failure'\n);\n\n/**\n * get elapsed days thresholds\n */\nexport const getElapsedDaysThresholds = createAction('[Management] get elapsed days thresholds');\nexport const getElapsedDaysThresholdsSuccess = createAction(\n '[Management] get elapsed days thresholds success',\n props<{ thresholdsConfiguration: RestThresholdsConfiguration }>()\n);\nexport const getElapsedDaysThresholdsFailure = createAction('[Management] get elapsed days thresholds failure');\n\n/**\n * update elapsed days thresholds\n */\nexport const updateElapsedDaysThresholds = createAction(\n '[Management] update elapsed days thresholds',\n props<{ thresholdsConfiguration: RestThresholdsConfiguration }>()\n);\nexport const updateElapsedDaysThresholdsSuccess = createAction('[Management] update elapsed days thresholds success');\nexport const updateElapsedDaysThresholdsFailure = createAction('[Management] update elapsed days thresholds failure');\n\nexport const loadFinish = createAction('[Management] load finish');\nexport const loadFinishSucceded = createAction('[Management] load finish succeeded', props<{ finishTypes: any }>());\nexport const loadFinishFailed = createAction('[Management] load finish failed');\n\nexport const addFinish = createAction('[Management] add finish', props<{ finish: string }>());\nexport const addFinishSuccess = createAction('[Management] add finish success');\nexport const addFinishFailure = createAction('[Management] add finish failure');\n\nexport const updateFinish = createAction('[Management] update finish', props<{ id: number; name: string }>());\nexport const updateFinishSuccess = createAction('[Management] update finish success');\nexport const updateFinishFailure = createAction('[Management] update finish failure');\n\nexport const deleteFinish = createAction('[Management] delete finish', props<{ id: number }>());\nexport const deleteFinishSuccess = createAction('[Management] delete finish success');\nexport const deleteFinishFailure = createAction('[Management] delete finish failure');\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnoverConfigurationStepAssigneesService {\n constructor(private restApiService: RestapiService) {}\n\n getResponsibleParties(): Observable {\n return this.restApiService.getData(`workflowassignments`);\n }\n\n getResponsiblePartiesByPortfolioId(portfolioId: number): Observable {\n return this.restApiService.getData(\n `workflowassignments/portfolio/${portfolioId}`\n );\n }\n\n getResponsiblePartiesByPropertyId(propertyId: number): Observable {\n return this.restApiService.getData(`workflowassignments/property/${propertyId}`);\n }\n\n createResponsibleParties(\n workflowList: RestWorkflowStepAssignmentModel[]\n ): Observable {\n return this.restApiService.create(`workflowassignments`, workflowList);\n }\n\n updateResponsibleParties(\n workflowList: RestWorkflowStepAssignmentModel[]\n ): Observable {\n return this.restApiService.update(`workflowassignments`, workflowList);\n }\n\n getWorkflowAssignmentsByStepId(\n propertyId: number,\n stepId: WorkflowStepEnumType\n ): Observable {\n return this.restApiService.getData(\n `workflowassignments/property/${propertyId}/${stepId}`\n );\n }\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\nimport { TurnoverConfigSection } from '@shared/interfaces/turnover-config.interface';\n\nimport {\n addFinish,\n addFinishFailure,\n addFinishSuccess,\n deleteFinish,\n deleteFinishFailure,\n deleteFinishSuccess,\n getElapsedDaysThresholds,\n getElapsedDaysThresholdsFailure,\n getElapsedDaysThresholdsSuccess,\n getTurnoverConfigurationByWorkflowStep,\n getTurnoverConfigurationByWorkflowStepFailure,\n getTurnoverConfigurationByWorkflowStepSuccess,\n getTurnoverConfigurationList,\n getTurnoverConfigurationListFailure,\n getTurnoverConfigurationListSuccess,\n loadFinishSucceded,\n updateElapsedDaysThresholds,\n updateFinish,\n updateFinishFailure,\n updateFinishSuccess,\n updateTurnoverFieldConfiguration,\n updateTurnoverFieldConfigurationFailure,\n updateTurnoverFieldConfigurationSuccess,\n} from '../actions/turnover-configuration.actions';\nimport { RestFinishType } from '../components/turnover-custom-fields/turnover-custom-fields.component';\n\nexport const turnoverConfigurationFeatureKey = 'turnoverConfiguration';\n\nexport interface TurnoverConfigurationState {\n isLoading: boolean;\n turnoverConfig: TurnoverConfigSection[];\n turnoverConfigLoading: boolean;\n turnoverConfigUpdateInProgress: boolean;\n\n turnoverStepConfigLoading: boolean;\n turnoverStepConfig: TurnoverConfigSection;\n\n thresholdsConfiguration: RestThresholdsConfiguration;\n thresholdsConfigurationLoading: boolean;\n\n thresholdsConfigurationUpdate: UpdateStatus;\n thresholdsConfigurationUpdateInProgress: boolean;\n\n finishTypes: RestFinishType[];\n finishInProgress: boolean;\n}\n\nexport const initialState: TurnoverConfigurationState = {\n isLoading: false,\n turnoverConfig: [],\n turnoverConfigLoading: false,\n turnoverConfigUpdateInProgress: false,\n\n turnoverStepConfigLoading: false,\n turnoverStepConfig: null,\n\n thresholdsConfiguration: null,\n thresholdsConfigurationLoading: false,\n\n thresholdsConfigurationUpdate: null,\n thresholdsConfigurationUpdateInProgress: false,\n\n finishTypes: [],\n finishInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n\n /**\n * get turnover configuration list\n */\n on(getTurnoverConfigurationList, (state, action) => ({ ...state, turnoverConfigLoading: true })),\n on(getTurnoverConfigurationListSuccess, (state, action) => ({\n ...state,\n turnoverConfigLoading: false,\n turnoverConfig: action.turnoverConfig,\n })),\n on(getTurnoverConfigurationListFailure, (state, action) => ({\n ...state,\n turnoverConfigLoading: false,\n turnoverConfig: [],\n })),\n\n /**\n *\n */\n on(getTurnoverConfigurationByWorkflowStep, (state, action) => ({ ...state, turnoverStepConfigLoading: true })),\n on(getTurnoverConfigurationByWorkflowStepSuccess, (state, action) => ({\n ...state,\n turnoverStepConfigLoading: false,\n turnoverStepConfig: action.turnoverConfig,\n })),\n on(getTurnoverConfigurationByWorkflowStepFailure, (state, action) => ({\n ...state,\n turnoverStepConfigLoading: false,\n turnoverStepConfig: null,\n })),\n\n /**\n * update turnover field configuration\n */\n on(updateTurnoverFieldConfiguration, (state, action) => ({ ...state, turnoverConfigUpdateInProgress: true })),\n on(updateTurnoverFieldConfigurationSuccess, (state, action) => ({\n ...state,\n turnoverConfigUpdateInProgress: false,\n })),\n on(updateTurnoverFieldConfigurationFailure, (state, action) => ({\n ...state,\n turnoverConfigUpdateInProgress: false,\n })),\n\n /**\n * get elapsed days thresholds\n */\n on(getElapsedDaysThresholds, (state, action) => ({\n ...state,\n thresholdsConfigurationLoading: true,\n })),\n on(getElapsedDaysThresholdsSuccess, (state, action) => ({\n ...state,\n thresholdsConfiguration: action.thresholdsConfiguration,\n thresholdsConfigurationLoading: false,\n })),\n on(getElapsedDaysThresholdsFailure, (state, action) => ({\n ...state,\n thresholdsConfiguration: null,\n thresholdsConfigurationLoading: false,\n })),\n\n /**\n * update elapsed days thresholds\n */\n on(updateElapsedDaysThresholds, (state, action) => ({\n ...state,\n thresholdsConfigurationUpdate: UpdateStatus.IN_PROGRESS,\n thresholdsConfigurationUpdateInProgress: true,\n })),\n on(getElapsedDaysThresholdsSuccess, (state, action) => ({\n ...state,\n thresholdsConfigurationUpdate: UpdateStatus.UPDATED,\n thresholdsConfigurationUpdateInProgress: false,\n })),\n on(getElapsedDaysThresholdsFailure, (state, action) => ({\n ...state,\n thresholdsConfigurationUpdate: UpdateStatus.ERROR,\n thresholdsConfigurationUpdateInProgress: false,\n })),\n\n on(loadFinishSucceded, (state, action) => ({\n ...state,\n finishTypes: action.finishTypes,\n })),\n on(addFinish, updateFinish, deleteFinish, (state, action) => ({\n ...state,\n finishInProgress: true,\n })),\n on(\n addFinishSuccess,\n addFinishFailure,\n updateFinishSuccess,\n updateFinishFailure,\n deleteFinishSuccess,\n deleteFinishFailure,\n (state, action) => ({\n ...state,\n finishInProgress: false,\n })\n )\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromTurnoverConfiguration from '../reducers';\n\nexport const selectTurnoverConfigurationState =\n createFeatureSelector(\n fromTurnoverConfiguration.turnoverConfigurationFeatureKey\n );\n\n/**\n * get turnover configuration list\n */\nexport const selectTurnoverConfig = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverConfig\n);\nexport const selectTurnoverConfigLoading = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverConfigLoading\n);\nexport const selectTurnoverConfigUpdateInProgress = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverConfigUpdateInProgress\n);\n\nexport const selectTurnoverStepConfigLoading = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverStepConfigLoading\n);\n\nexport const selectTurnoverStepConfig = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverStepConfig\n);\n\n/**\n * get elapsed days thresholds\n */\n\nexport const selectThresholdsConfigurationLoading = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.thresholdsConfigurationLoading\n);\n\nexport const selectThresholdsConfiguration = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.thresholdsConfiguration\n);\n\n/**\n * update elapsed days thresholds\n */\n\nexport const selectThresholdsConfigurationUpdate = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.thresholdsConfigurationUpdate\n);\n\nexport const selectThresholdsConfigurationUpdateInProgress = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.thresholdsConfigurationUpdateInProgress\n);\n\nexport const selectFinishes = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.finishTypes\n);\n\nexport const selectFinishInProgress = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.finishInProgress\n);\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, exhaustMap, map, mergeMap, of, switchMap } from 'rxjs';\n\nimport { TurnoverConfigService } from '@app/services/turnover-config.service';\nimport { loadEnumerations } from '@shared/actions/enumerations.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport {\n addFinish,\n addFinishFailure,\n addFinishSuccess,\n deleteFinish,\n deleteFinishFailure,\n deleteFinishSuccess,\n getElapsedDaysThresholds,\n getElapsedDaysThresholdsFailure,\n getElapsedDaysThresholdsSuccess,\n getTurnoverConfigurationByWorkflowStep,\n getTurnoverConfigurationByWorkflowStepFailure,\n getTurnoverConfigurationByWorkflowStepSuccess,\n getTurnoverConfigurationList,\n getTurnoverConfigurationListFailure,\n getTurnoverConfigurationListSuccess,\n loadFinish,\n loadFinishFailed,\n loadFinishSucceded,\n updateElapsedDaysThresholds,\n updateElapsedDaysThresholdsFailure,\n updateElapsedDaysThresholdsSuccess,\n updateFinish,\n updateFinishFailure,\n updateFinishSuccess,\n updateTurnoverFieldConfiguration,\n updateTurnoverFieldConfigurationFailure,\n updateTurnoverFieldConfigurationSuccess,\n} from '../actions/turnover-configuration.actions';\n\n@Injectable()\nexport class TurnoverConfigurationEffects {\n getTurnoverConfigurationList$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTurnoverConfigurationList),\n exhaustMap(action =>\n this.turnoverConfigService.getTurnoverConfigList().pipe(\n map(turnoverConfig => getTurnoverConfigurationListSuccess({ turnoverConfig })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTurnoverConfigurationList);\n return of(getTurnoverConfigurationListFailure());\n })\n )\n )\n )\n );\n\n getTurnoverConfigListByWorkflowStep$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getTurnoverConfigurationByWorkflowStep),\n switchMap(action =>\n this.turnoverConfigService.getTurnoverConfigListByWorkflowType(action.workflowStep).pipe(\n map(turnoverConfig => getTurnoverConfigurationByWorkflowStepSuccess({ turnoverConfig })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTurnoverConfigurationElement);\n return of(getTurnoverConfigurationByWorkflowStepFailure());\n })\n )\n )\n )\n );\n\n updateTurnoverFieldConfiguration$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateTurnoverFieldConfiguration),\n mergeMap(action =>\n this.turnoverConfigService.updateTurnoverFieldConfiguration(action.turnoverConfig).pipe(\n map(() => updateTurnoverFieldConfigurationSuccess()),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingTurnoverFieldConfiguration);\n return of(updateTurnoverFieldConfigurationFailure());\n })\n )\n )\n )\n );\n\n getElapsedDaysThresholds$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getElapsedDaysThresholds),\n switchMap(action =>\n this.turnoverConfigService.getElapsedDaysThresholds().pipe(\n map(thresholdsConfiguration => getElapsedDaysThresholdsSuccess({ thresholdsConfiguration })),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorRetrievingElapsedDaysThresholds);\n return of(getElapsedDaysThresholdsFailure());\n })\n )\n )\n )\n );\n\n updateElapsedDaysThresholds$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateElapsedDaysThresholds),\n mergeMap(action =>\n this.turnoverConfigService.updateElapsedDaysThresholds(action.thresholdsConfiguration).pipe(\n map(() => updateElapsedDaysThresholdsSuccess()),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingElapsedDaysThresholds);\n return of(updateElapsedDaysThresholdsFailure());\n })\n )\n )\n )\n );\n\n loadFinish$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadFinish),\n mergeMap(action => {\n return this.turnoverConfigService.getFinishTypes().pipe(\n map(finishTypes => loadFinishSucceded({ finishTypes })),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorLoadingFinish);\n return of(loadFinishFailed());\n })\n );\n })\n )\n );\n\n addFinish$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addFinish),\n mergeMap(action => {\n return this.turnoverConfigService.addFinishType({ name: action.finish }).pipe(\n mergeMap(finishTypes => [addFinishSuccess(), loadFinish(), loadEnumerations()]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorAddingFinish);\n return of(addFinishFailure());\n })\n );\n })\n )\n );\n\n updateFinish$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateFinish),\n mergeMap(action => {\n return this.turnoverConfigService.updateFinishType({ id: action.id, name: action.name }).pipe(\n mergeMap(finishTypes => [updateFinishSuccess(), loadFinish(), loadEnumerations()]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingFinish);\n return of(updateFinishFailure());\n })\n );\n })\n )\n );\n\n deleteFinish$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteFinish),\n mergeMap(action => {\n return this.turnoverConfigService.deleteFinishType(action.id).pipe(\n mergeMap(finishTypes => [deleteFinishSuccess(), loadFinish(), loadEnumerations()]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorDeletingFinish);\n return of(deleteFinishFailure());\n })\n );\n })\n )\n );\n\n constructor(\n private actions$: Actions,\n private turnoverConfigService: TurnoverConfigService,\n private snackbarService: SnackbarService\n ) {}\n}\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { TurnoverConfigurationEffects } from '../effects/turnover-configuration.effects';\nimport * as fromTurnoverConfiguration from '../reducers';\n\n@NgModule({\n declarations: [],\n imports: [\n StoreModule.forFeature(\n fromTurnoverConfiguration.turnoverConfigurationFeatureKey,\n fromTurnoverConfiguration.reducer\n ),\n EffectsModule.forFeature([TurnoverConfigurationEffects]),\n ],\n})\nexport class TurnoverConfigurationStoreModule {}\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport {\n ReplacePropertyManagers,\n RestPortfolioModel,\n RestPropertyManagerAccessModel,\n RestPropertyModel,\n UpdatePropertyManagerModel,\n} from '@shared/interfaces/rest-portfolio-model.interface';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\n\n/* Portfolios List */\nexport const loadAllUserPortfolios = createAction('[Portfolio] Load all portfolio');\nexport const loadAllUserPortfoliosSuccess = createAction(\n '[Portfolio] All portfolio loaded successfully',\n props<{ portfolioItems: RestPortfolioModel[] }>()\n);\nexport const loadAllUserPortfoliosFailed = createAction('[Portfolio] All portfolio loading failed');\n\n/* Portfolio Details */\nexport const loadPortfolioDetails = createAction(\n '[Portfolio] Load portfolio details',\n props<{ portfolioId: string }>()\n);\nexport const loadPortfolioDetailsSuccess = createAction(\n '[Portfolio] portfolio details loaded successfully',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\nexport const loadPortfolioDetailsFailed = createAction('[Portfolio] portfolio details loading failed');\n\n/* Property Details */\nexport const loadPropertyDetails = createAction('[Portfolio] Load property details', props<{ propertyId: number }>());\nexport const loadPropertyDetailsSuccess = createAction(\n '[Portfolio] property details loaded successfully',\n props<{ propertyDetails: any }>()\n);\nexport const loadPropertyDetailsFailed = createAction('[Portfolio] property details loading failed');\n\n/* Update Property Details */\nexport const updatePortfolioName = createAction(\n '[Portfolio] Update property name',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\nexport const updatePortfolioAutoAdd = createAction(\n '[Portfolio] Update property auto add',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\n\nexport const updatePortfolioDetails = createAction(\n '[Portfolio] updatePortfolioDetails',\n props<{ portfolioDetails: RestPortfolioModel; doNotRefetchPortfolios?: boolean }>()\n);\nexport const updatePortfolioDetailsSuccess = createAction(\n '[Portfolio] Update property details finished successfully',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\nexport const updatePortfolioDetailsFailed = createAction('[Portfolio] Update property details failed');\n\n/* Add new property to portfolio */\nexport const addPropertyToPortfolio = createAction(\n '[Portfolio] Add new property to portfolio',\n props<{ portfolioId: string; propertyIds: number[] }>()\n);\n/* Remove property from portfolio */\nexport const removePropertyFromPortfolio = createAction(\n '[Portfolio] Remove property from portfolio',\n props<{ portfolioId: any; propertyId: string }>()\n);\n\n/* Add new portfolio */\nexport const createNewPortfolio = createAction('[Portfolio] Add new portfolio', props<{ portfolioDetails: any }>());\n/* Delete portfolio */\nexport const deletePortfolio = createAction('[Portfolio] Remove portfolio', props<{ portfolioId: any }>());\nexport const clearPortfolioData = createAction('[Portfolio] Clear portfolio data');\n\n/* Load Property Managers */\nexport const loadPropertyManagers = createAction('[Portfolio] Load property managers');\nexport const loadPropertyManagersSucceeded = createAction(\n '[Portfolio] Load property managers succeeded',\n props<{ propertyManagers: RestPropertyManagerAccessModel[] }>()\n);\nexport const loadPropertyManagersFailed = createAction('[Portfolio] Load property managers failed');\n\n/* Update property */\nexport const updateProperty = createAction('[Portfolio] Update property data', props<{ propertyDetails: any }>());\nexport const updatePropertyFailed = createAction('[Portfolio] Update property data failed');\n\n/* Load unassigned properties */\nexport const loadAllUserUnassignedProperties = createAction('[Portfolio] Load unassigned properties');\nexport const loadAllUserUnassignedPropertiesSucceeded = createAction(\n '[Portfolio] Load unassigned properties succeeded',\n props<{ unassignedProperties: RestPropertyModel[] }>()\n);\nexport const loadAllUserUnassignedPropertiesFailed = createAction('[Portfolio] Load unassigned properties failed');\n\n/* load Property Managers For Property */\nexport const loadPropertyManagersForProperty = createAction(\n '[Portfolio] load Property Managers For Property',\n props<{ propertyId: number }>()\n);\nexport const loadPropertyManagersForPropertySuccess = createAction(\n '[Portfolio] load Property Managers For Property success',\n props<{ propertyManagers: RestPropertyManagerAccessModel[] }>()\n);\nexport const loadPropertyManagersForPropertyFailed = createAction(\n '[Portfolio] load Property Managers For Property failed'\n);\n\n/**\n * remove property managers\n */\nexport const removePropertyManagers = createAction(\n '[Portfolio] remove property managers',\n props<{ propertyManagerModels: UpdatePropertyManagerModel[] }>()\n);\nexport const removePropertyManagersSuccess = createAction('[Portfolio] remove property managers success');\nexport const removePropertyManagersFailed = createAction('[Portfolio] remove property managers failed');\n\n/**\n * remove property managers\n */\nexport const setPropertyManagers = createAction(\n '[Portfolio] set property manager',\n props<{ propertyManagerModels: UpdatePropertyManagerModel[] }>()\n);\nexport const setPropertyManagersSuccess = createAction('[Portfolio] set property managers success');\nexport const setPropertyManagersFailed = createAction('[Portfolio] set property managers failed');\n\n/**\n * change property managers\n */\nexport const changePropertyManagers = createAction(\n '[Portfolio] change property manager',\n props<{ replacePropertyManagers: ReplacePropertyManagers }>()\n);\nexport const changePropertyManagersSuccess = createAction('[Portfolio] change property managers success');\nexport const changePropertyManagersFailed = createAction('[Portfolio] change property managers failed');\n\n/**\n * get Property Units\n */\nexport const getPropertyUnits = createAction('[Portfolio] get Property Units', props<{ propertyId: number }>());\nexport const getPropertyUnitsSuccess = createAction(\n '[Portfolio] get Property Units success',\n props<{ propertyUnits: RestUnitSummaryModel[] }>()\n);\nexport const getPropertyUnitsFailed = createAction('[Portfolio] get Property Units failed');\n\n/**\n * get unit attachments\n */\nexport const getUnitAttachments = createAction('[Portfolio] get unit attachments', props<{ unitId: number }>());\nexport const getUnitAttachmentsSuccess = createAction(\n '[Portfolio] get unit attachments success',\n props<{ unitAttachments: RestGenericTypedAttachment[] }>()\n);\nexport const getUnitAttachmentsFail = createAction('[Portfolio] get unit attachments failed');\n\n/**\n * set unit attachment\n */\nexport const setUnitAttachment = createAction(\n '[Portfolio] set unit attachment',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const setUnitAttachmentSuccess = createAction('[Portfolio] set unit attachment success');\nexport const setUnitAttachmentFail = createAction('[Portfolio] set unit attachment failed');\n\n/**\n * delete unit attachment\n */\nexport const deleteUnitAttachment = createAction(\n '[Portfolio] delete unit attachment',\n props<{ unitId: number; attachment: RestGenericTypedAttachment }>()\n);\nexport const deleteUnitAttachmentSuccess = createAction('[Portfolio] delete unit attachment success');\nexport const deleteUnitAttachmentFailed = createAction('[Portfolio] delete unit attachment error');\n\n/**\n * delete file from repository\n */\nexport const deleteFileFromRepository = createAction(\n '[Portfolio] delete file from repository',\n props<{ fileId: number }>()\n);\nexport const deleteFileFromRepositorySuccess = createAction('[Portfolio] delete file from repository success');\nexport const deleteFileFromRepositoryFailed = createAction('[Portfolio] delete file from repository failed');\n\n/**\n * clear Property Data\n */\nexport const clearPropertyData = createAction('[Portfolio] clear property data');\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n addPropertyToPortfolio,\n clearPortfolioData,\n clearPropertyData,\n createNewPortfolio,\n deletePortfolio,\n deleteUnitAttachment,\n deleteUnitAttachmentFailed,\n deleteUnitAttachmentSuccess,\n getPropertyUnits,\n getPropertyUnitsFailed,\n getPropertyUnitsSuccess,\n getUnitAttachments,\n getUnitAttachmentsFail,\n getUnitAttachmentsSuccess,\n loadAllUserPortfolios,\n loadAllUserPortfoliosFailed,\n loadAllUserPortfoliosSuccess,\n loadAllUserUnassignedProperties,\n loadAllUserUnassignedPropertiesSucceeded,\n loadPortfolioDetails,\n loadPortfolioDetailsFailed,\n loadPortfolioDetailsSuccess,\n loadPropertyDetails,\n loadPropertyDetailsFailed,\n loadPropertyDetailsSuccess,\n loadPropertyManagers,\n loadPropertyManagersFailed,\n loadPropertyManagersForProperty,\n loadPropertyManagersForPropertyFailed,\n loadPropertyManagersForPropertySuccess,\n loadPropertyManagersSucceeded,\n removePropertyFromPortfolio,\n setUnitAttachment,\n setUnitAttachmentFail,\n setUnitAttachmentSuccess,\n updatePortfolioName,\n updateProperty,\n updatePropertyFailed,\n} from '@portfolio/actions/portfolio.actions';\nimport {\n loadAllUserProperties,\n loadAllUserPropertiesFailed,\n loadAllUserPropertiesSucceeded,\n} from '@shared/actions/user.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport {\n RestPortfolioModel,\n RestPropertyManagerAccessModel,\n RestPropertyModel,\n} from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\n\nexport const portfolioFeatureKey = 'portfolio';\n\nexport interface PortfolioState {\n portfolioItemsLoading?: boolean;\n portfolioItems?: RestPortfolioModel[];\n\n portfolioDetailsLoading?: boolean;\n portfolioDetails?: RestPortfolioModel;\n\n propertyDetailsLoading?: boolean;\n propertyDetails?: RestPropertyModel;\n\n userProperties?: RestPropertyModel[];\n userPropertiesLoading?: boolean;\n\n portfolioUpdateOngoing?: boolean;\n portfolioNewPropertyUpdateOngoing?: boolean;\n portfolioRemovePropertyUpdateOngoing?: boolean;\n\n propertyDetailsUpdateOngoing?: boolean;\n\n deletePortfolioOngoing?: boolean;\n\n unassignedProperties?: RestPropertyModel[];\n unassignedPropertiesLoading?: boolean;\n\n allPropertyManagers?: RestPropertyManagerAccessModel[];\n allPropertyManagersLoading?: boolean;\n\n propertyManagersForProperty?: RestPropertyManagerAccessModel[];\n propertyManagersForPropertyLoading?: boolean;\n\n propertyUnits?: RestUnitSummaryModel[];\n propertyUnitsLoading?: boolean;\n setUnitAttachmentInProgress?: boolean;\n\n unitAttachments?: RestGenericTypedAttachment[];\n unitAttachmentsLoading?: boolean;\n\n deleteUnitAttachmentInProgress?: boolean;\n deleteUnitAttachmentStatus?: UpdateStatus;\n}\n\nexport const initialState: PortfolioState = {\n portfolioItemsLoading: false,\n propertyManagersForPropertyLoading: false,\n allPropertyManagersLoading: false,\n unitAttachmentsLoading: false,\n deleteUnitAttachmentInProgress: false,\n deleteUnitAttachmentStatus: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /* Portfolios List */\n on(loadAllUserPortfolios, (state, action) => ({ ...state, portfolioItemsLoading: true })),\n on(loadAllUserPortfoliosSuccess, (state, action) => ({\n ...state,\n portfolioItemsLoading: false,\n portfolioItems: action.portfolioItems,\n deletePortfolioOngoing: false,\n })),\n on(loadAllUserPortfoliosFailed, (state, action) => ({\n ...state,\n portfolioItemsLoading: false,\n portfolioItems: [],\n deletePortfolioOngoing: false,\n })),\n\n /* Portfolio Details */\n on(loadPortfolioDetails, (state, action) => ({ ...state, portfolioDetailsLoading: true })),\n on(loadPortfolioDetailsSuccess, (state, action) => ({\n ...state,\n portfolioDetailsLoading: false,\n portfolioUpdateOngoing: false,\n portfolioNewPropertyUpdateOngoing: false,\n portfolioRemovePropertyUpdateOngoing: false,\n portfolioDetails: action.portfolioDetails,\n })),\n on(loadPortfolioDetailsFailed, (state, action) => ({\n ...state,\n portfolioDetailsLoading: false,\n portfolioDetails: null,\n })),\n\n /* Property Details */\n on(loadPropertyDetails, (state, action) => ({ ...state, propertyDetailsLoading: true })),\n on(loadPropertyDetailsSuccess, (state, action) => ({\n ...state,\n propertyDetailsLoading: false,\n propertyDetails: action.propertyDetails,\n propertyDetailsUpdateOngoing: false,\n })),\n on(loadPropertyDetailsFailed, (state, action) => ({\n ...state,\n propertyDetailsLoading: false,\n propertyDetails: null,\n })),\n\n /* All Properties */\n on(loadAllUserProperties, (state, action) => ({ ...state, userPropertiesLoading: true })),\n on(loadAllUserPropertiesSucceeded, (state, action) => ({\n ...state,\n userProperties: action.properties,\n userPropertiesLoading: false,\n })),\n on(loadAllUserPropertiesFailed, (state, action) => ({\n ...state,\n userProperties: [],\n userPropertiesLoading: false,\n })),\n\n on(updatePortfolioName, createNewPortfolio, (state, action) => ({ ...state, portfolioUpdateOngoing: true })),\n on(addPropertyToPortfolio, (state, action) => ({ ...state, portfolioNewPropertyUpdateOngoing: true })),\n on(removePropertyFromPortfolio, (state, action) => ({ ...state, portfolioRemovePropertyUpdateOngoing: true })),\n on(clearPortfolioData, (state, action) => ({\n ...state,\n portfolioDetailsLoading: false,\n portfolioUpdateOngoing: false,\n portfolioNewPropertyUpdateOngoing: false,\n portfolioRemovePropertyUpdateOngoing: false,\n portfolioDetails: null,\n })),\n\n on(updateProperty, (state, action) => ({ ...state, propertyDetailsUpdateOngoing: true })),\n on(updatePropertyFailed, (state, action) => ({ ...state, propertyDetailsUpdateOngoing: false })),\n on(deletePortfolio, (state, action) => ({ ...state, deletePortfolioOngoing: true })),\n\n on(loadAllUserUnassignedProperties, (state, action) => ({ ...state, unassignedPropertiesLoading: true })),\n on(loadAllUserUnassignedPropertiesSucceeded, (state, action) => ({\n ...state,\n unassignedProperties: action.unassignedProperties,\n unassignedPropertiesLoading: false,\n })),\n on(deletePortfolio, (state, action) => ({\n ...state,\n unassignedPropertiesLoading: false,\n unassignedProperties: [],\n })),\n\n on(loadPropertyManagers, (state, action) => ({ ...state, allPropertyManagersLoading: true })),\n on(loadPropertyManagersSucceeded, (state, action) => ({\n ...state,\n allPropertyManagers: action.propertyManagers,\n allPropertyManagersLoading: false,\n })),\n on(loadPropertyManagersFailed, (state, action) => ({\n ...state,\n allPropertyManagers: [],\n allPropertyManagersLoading: false,\n })),\n\n on(loadPropertyManagersForProperty, (state, action) => ({ ...state, propertyManagersForPropertyLoading: true })),\n on(loadPropertyManagersForPropertySuccess, (state, action) => ({\n ...state,\n propertyManagersForProperty: action.propertyManagers,\n propertyManagersForPropertyLoading: false,\n })),\n on(loadPropertyManagersForPropertyFailed, (state, action) => ({\n ...state,\n propertyManagersForProperty: [],\n propertyManagersForPropertyLoading: false,\n })),\n /**\n * get unit attachments\n */\n on(getUnitAttachments, (state, action) => ({ ...state, unitAttachmentsLoading: true })),\n on(getUnitAttachmentsSuccess, (state, action) => ({\n ...state,\n unitAttachments: action.unitAttachments,\n unitAttachmentsLoading: false,\n })),\n on(getUnitAttachmentsFail, (state, action) => ({\n ...state,\n unitAttachments: [],\n unitAttachmentsLoading: false,\n })),\n\n /**\n * get Property Units\n */\n on(getPropertyUnits, (state, action) => ({ ...state, propertyUnitsLoading: true })),\n on(getPropertyUnitsSuccess, (state, action) => ({\n ...state,\n propertyUnits: action.propertyUnits,\n propertyUnitsLoading: false,\n })),\n on(getPropertyUnitsFailed, (state, action) => ({\n ...state,\n propertyUnits: [],\n propertyUnitsLoading: false,\n })),\n\n /**\n * set unit attachment\n */\n on(setUnitAttachment, (state, action) => ({ ...state, setUnitAttachmentInProgress: true })),\n on(setUnitAttachmentSuccess, (state, action) => ({\n ...state,\n setUnitAttachmentInProgress: false,\n })),\n on(setUnitAttachmentFail, (state, action) => ({\n ...state,\n setUnitAttachmentInProgress: false,\n })),\n\n /**\n * delete unit attachment\n */\n on(deleteUnitAttachment, (state, action) => ({ ...state, deleteUnitAttachmentInProgress: true })),\n on(deleteUnitAttachmentSuccess, (state, action) => ({\n ...state,\n deleteUnitAttachmentInProgress: false,\n deleteUnitAttachmentStatus: UpdateStatus.DELETED,\n })),\n on(deleteUnitAttachmentFailed, (state, action) => ({\n ...state,\n deleteUnitAttachmentInProgress: false,\n deleteUnitAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * get Property Units\n */\n on(clearPropertyData, (state, action) => ({\n ...state,\n propertyDetails: null,\n propertyDetailsLoading: false,\n propertyManagersForProperty: [],\n propertyManagersForPropertyLoading: false,\n propertyUnits: [],\n propertyUnitsLoading: false,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromPortfolio from '../reducers/portfolio.reducer';\n\nexport const selectPortfolioState = createFeatureSelector(\n fromPortfolio.portfolioFeatureKey\n);\n\nexport const selectPortfolios = createSelector(selectPortfolioState, portfolioState => portfolioState.portfolioItems);\n\nexport const selectPortfoliosLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioItemsLoading\n);\n\nexport const selectPortfolioDetails = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioDetails\n);\nexport const selectPortfolioDetailsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioDetailsLoading\n);\n\nexport const selectPropertyDetails = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyDetails\n);\nexport const selectPropertyDetailsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyDetailsLoading\n);\nexport const selectPropertyDetailsUpdateOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyDetailsUpdateOngoing\n);\n\nexport const selectProperties = createSelector(selectPortfolioState, portfolioState => portfolioState.userProperties);\n\nexport const selectPropertiesLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.userPropertiesLoading\n);\n\nexport const selectPortfolioUpdate = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioUpdateOngoing\n);\n\nexport const selectPortfolioNewPropertyUpdateOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioNewPropertyUpdateOngoing\n);\nexport const selectPortfolioRemovePropertyUpdateOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioRemovePropertyUpdateOngoing\n);\n\nexport const selectPortfolioDeleteOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.deletePortfolioOngoing\n);\n\nexport const selectUnassignedProperties = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unassignedProperties\n);\n\nexport const selectUnassignedPropertiesLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unassignedPropertiesLoading\n);\n\nexport const selectAllPropertyManagers = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.allPropertyManagers\n);\n\nexport const selectAllPropertyManagersLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.allPropertyManagersLoading\n);\nexport const selectPropertyManagersForProperty = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyManagersForProperty\n);\n\nexport const selectPropertyManagersForPropertyLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyManagersForPropertyLoading\n);\nexport const selectPropertyUnits = createSelector(selectPortfolioState, portfolioState => portfolioState.propertyUnits);\n\nexport const selectPropertyUnitsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyUnitsLoading\n);\n\nexport const selectUnitAttachments = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unitAttachments\n);\n\nexport const selectUnitAttachmentsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unitAttachmentsLoading\n);\n\nexport const selectDeleteUnitAttachmentInProgress = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.deleteUnitAttachmentInProgress\n);\n\nexport const selectDeleteUnitAttachmentStatus = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.deleteUnitAttachmentStatus\n);\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { iif, of } from 'rxjs';\nimport { catchError, exhaustMap, map, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { PropertiesService } from '@app/services/properties.service';\nimport { RestapiService } from '@app/services/restapi.service';\nimport { UnitsService } from '@app/services/units.service';\nimport {\n addPropertyToPortfolio,\n changePropertyManagers,\n createNewPortfolio,\n deleteFileFromRepository,\n deleteFileFromRepositoryFailed,\n deleteFileFromRepositorySuccess,\n deletePortfolio,\n deleteUnitAttachment,\n deleteUnitAttachmentFailed,\n deleteUnitAttachmentSuccess,\n getPropertyUnits,\n getPropertyUnitsFailed,\n getPropertyUnitsSuccess,\n getUnitAttachments,\n getUnitAttachmentsSuccess,\n loadAllUserPortfolios,\n loadAllUserPortfoliosFailed,\n loadAllUserPortfoliosSuccess,\n loadAllUserUnassignedProperties,\n loadAllUserUnassignedPropertiesFailed,\n loadAllUserUnassignedPropertiesSucceeded,\n loadPortfolioDetails,\n loadPortfolioDetailsFailed,\n loadPortfolioDetailsSuccess,\n loadPropertyDetails,\n loadPropertyDetailsFailed,\n loadPropertyDetailsSuccess,\n loadPropertyManagers,\n loadPropertyManagersFailed,\n loadPropertyManagersForProperty,\n loadPropertyManagersForPropertyFailed,\n loadPropertyManagersForPropertySuccess,\n loadPropertyManagersSucceeded,\n removePropertyFromPortfolio,\n removePropertyManagers,\n removePropertyManagersFailed,\n removePropertyManagersSuccess,\n setPropertyManagers,\n setPropertyManagersFailed,\n setPropertyManagersSuccess,\n setUnitAttachment,\n setUnitAttachmentFail,\n setUnitAttachmentSuccess,\n updatePortfolioAutoAdd,\n updatePortfolioDetails,\n updatePortfolioDetailsFailed,\n updatePortfolioDetailsSuccess,\n updatePortfolioName,\n updateProperty,\n updatePropertyFailed,\n} from '@portfolio/actions/portfolio.actions';\nimport { selectPortfolioDetails, selectPropertyDetails } from '@portfolio/selectors/portfolio.selectors';\nimport {\n loadAllUserProperties,\n loadAllUserPropertiesFailed,\n loadAllUserPropertiesSucceeded,\n} from '@shared/actions/user.actions';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable()\nexport class PortfolioEffects {\n loadAllPortfolio$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllUserPortfolios),\n exhaustMap(() =>\n this.restApiService.getData(`portfolio`).pipe(\n map(result => loadAllUserPortfoliosSuccess({ portfolioItems: result || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingPortfoliosList);\n return of(loadAllUserPortfoliosFailed());\n })\n )\n )\n )\n );\n\n loadPortfolioDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPortfolioDetails),\n switchMap(action =>\n this.restApiService.getData(`portfolio/${action.portfolioId}`).pipe(\n map(result => loadPortfolioDetailsSuccess({ portfolioDetails: result })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingPortfolio);\n return of(loadPortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n loadPropertyDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPropertyDetails),\n switchMap(action =>\n this.restApiService.getData(`properties/${action.propertyId}`).pipe(\n map(result => loadPropertyDetailsSuccess({ propertyDetails: result || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingPropertyDetails);\n return of(loadPropertyDetailsFailed());\n })\n )\n )\n )\n );\n\n loadAllUserProperties$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllUserProperties),\n switchMap(() =>\n this.propertiesService.getAllUserProperties().pipe(\n map(properties => loadAllUserPropertiesSucceeded({ properties })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingAllUserProperties);\n return of(loadAllUserPropertiesFailed());\n })\n )\n )\n )\n );\n\n loadAllUserUnassignedProperties$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllUserUnassignedProperties),\n switchMap(() =>\n this.propertiesService.getAllUserUnassignedProperties().pipe(\n map(unassignedProperties => loadAllUserUnassignedPropertiesSucceeded({ unassignedProperties })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingUnassignedUserProperties);\n return of(loadAllUserUnassignedPropertiesFailed());\n })\n )\n )\n )\n );\n\n updatePortfolioName$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updatePortfolioName),\n mergeMap(action =>\n this.restApiService\n .update(`portfolio/${action.portfolioDetails.id}`, action.portfolioDetails)\n .pipe(\n withLatestFrom(this.store.select(selectPortfolioDetails)),\n mergeMap(([updatedPortfolioDetails, portfolioDetails]) => [\n loadPortfolioDetailsSuccess({\n portfolioDetails: {\n ...portfolioDetails,\n name: updatedPortfolioDetails.name,\n },\n }),\n loadAllUserPortfolios(),\n ]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpadtingPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n updatePortfolioDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updatePortfolioDetails),\n mergeMap(action =>\n this.restApiService\n .update(`portfolio/${action.portfolioDetails.id}`, action.portfolioDetails)\n .pipe(\n mergeMap(portfolioDetails =>\n iif(\n () => action.doNotRefetchPortfolios,\n [updatePortfolioDetailsSuccess({ portfolioDetails })],\n [updatePortfolioDetailsSuccess({ portfolioDetails }), loadAllUserPortfolios()]\n )\n ),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpadtingPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n updatePortfolioAutoAdd$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updatePortfolioAutoAdd),\n mergeMap(action =>\n this.restApiService\n .update(`portfolio/${action.portfolioDetails.id}`, action.portfolioDetails)\n .pipe(\n withLatestFrom(this.store.select(selectPortfolioDetails)),\n mergeMap(([updatedPortfolioDetails, portfolioDetails]) => [\n loadPortfolioDetailsSuccess({\n portfolioDetails: {\n ...portfolioDetails,\n autoAddNewProperties: updatedPortfolioDetails.autoAddNewProperties,\n preleaseFilterMode: updatedPortfolioDetails.preleaseFilterMode,\n },\n }),\n ]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpadtingPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n addPropertyToPortfolio$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addPropertyToPortfolio),\n mergeMap(action =>\n this.restApiService\n .update(`Portfolio/${action.portfolioId}/AddProperties`, action.propertyIds)\n .pipe(\n mergeMap(portfolioDetails => {\n return [\n loadPortfolioDetails({\n portfolioId: action.portfolioId,\n }),\n loadAllUserUnassignedProperties(),\n loadAllUserProperties(),\n ];\n }),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.WhileAddingNewPropertyToPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n removePropertyFromPortfolio$ = createEffect(() =>\n this.actions$.pipe(\n ofType(removePropertyFromPortfolio),\n mergeMap(action =>\n this.restApiService\n .update(`Portfolio/${action.portfolioId}/RemoveProperties`, [action.propertyId])\n .pipe(\n mergeMap(() => {\n return [\n loadPortfolioDetails({\n portfolioId: action.portfolioId,\n }),\n loadAllUserUnassignedProperties(),\n loadAllUserProperties(),\n ];\n }),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.WhileDeletingPropertyFromPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n createNewPortfolio$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createNewPortfolio),\n mergeMap(action =>\n this.restApiService.create(`Portfolio`, action.portfolioDetails).pipe(\n tap(portfolioDetails => {\n this.router.navigate([AppRoutes.SETTINGS_PORTFOLIO, portfolioDetails.id]).then();\n }),\n mergeMap(portfolioDetails => [\n loadPortfolioDetailsSuccess({\n portfolioDetails,\n }),\n loadAllUserPortfolios(),\n ]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.WhileCreatingNewPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n loadPropertyManagers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPropertyManagers),\n exhaustMap(action =>\n this.propertiesService.getPropertyManagers().pipe(\n map(propertyManagers => loadPropertyManagersSucceeded({ propertyManagers })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingPropertyManagers);\n return of(loadPropertyManagersFailed());\n })\n )\n )\n )\n );\n\n loadPropertyManagersForProperty$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadPropertyManagersForProperty),\n switchMap(action =>\n this.propertiesService.getPropertyManagersForProperty(action.propertyId).pipe(\n map(managerList => loadPropertyManagersForPropertySuccess({ propertyManagers: managerList || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingPropertyManagersForProperty);\n return of(loadPropertyManagersForPropertyFailed());\n })\n )\n )\n )\n );\n\n updateProperty$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateProperty),\n mergeMap(action =>\n this.restApiService\n .update(`Properties/${action.propertyDetails.id}`, action.propertyDetails)\n .pipe(\n map(propertyDetails => loadPropertyDetailsSuccess({ propertyDetails })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingPropertyDetails);\n return of(updatePropertyFailed());\n })\n )\n )\n )\n );\n\n deletePortfolio$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deletePortfolio),\n mergeMap(action =>\n this.restApiService.delete(`Portfolio/${action.portfolioId}`).pipe(\n map(() => loadAllUserPortfolios()),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RemovingPortfolio);\n return of(updatePortfolioDetailsFailed());\n })\n )\n )\n )\n );\n\n removePropertyManagers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(removePropertyManagers),\n mergeMap(action =>\n this.propertiesService.removePropertyManagers(action.propertyManagerModels).pipe(\n map(() => removePropertyManagersSuccess()),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RemovingManagerFromProperty);\n return of(removePropertyManagersFailed());\n })\n )\n )\n )\n );\n\n setPropertyManagers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setPropertyManagers),\n withLatestFrom(this.store.select(selectPropertyDetails)),\n mergeMap(([action, property]) =>\n this.propertiesService.setPropertyManagers(action.propertyManagerModels).pipe(\n mergeMap(() => [setPropertyManagersSuccess(), loadPropertyDetails({ propertyId: property.id })]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.AssigningManagerToProperty);\n return of(setPropertyManagersFailed());\n })\n )\n )\n )\n );\n\n changePropertyManagers$ = createEffect(() =>\n this.actions$.pipe(\n ofType(changePropertyManagers),\n withLatestFrom(this.store.select(selectPropertyDetails)),\n mergeMap(([action, property]) =>\n this.propertiesService\n .removePropertyManagers(action.replacePropertyManagers.oldManager)\n .pipe(map(() => setPropertyManagers({ propertyManagerModels: action.replacePropertyManagers.newManager })))\n )\n )\n );\n\n getPropertyUnits$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getPropertyUnits),\n switchMap(action =>\n this.unitsService.getPropertyUnits(action.propertyId).pipe(\n map(propertyUnits => getPropertyUnitsSuccess({ propertyUnits })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingPropertyUnits);\n return of(getPropertyUnitsFailed());\n })\n )\n )\n )\n );\n\n getUnitAttachments$ = createEffect(() =>\n this.actions$.pipe(\n ofType(getUnitAttachments),\n switchMap(action =>\n this.unitsService.getUnitAttachments(action.unitId).pipe(\n map(attachments => getUnitAttachmentsSuccess({ unitAttachments: attachments || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingUnitsAttachments);\n return of(getPropertyUnitsFailed());\n })\n )\n )\n )\n );\n\n setUnitAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setUnitAttachment),\n mergeMap(action =>\n this.unitsService.setAttachment(action.attachmentToEntity).pipe(\n mergeMap(() => [\n setUnitAttachmentSuccess(),\n getUnitAttachments({ unitId: action.attachmentToEntity.unitId }),\n ]),\n tap(() => {\n const attachmentType = action.attachmentToEntity?.attachmentType as UnitAttachmentType;\n let message = 'Attachment(s) uploaded';\n switch (attachmentType) {\n case UnitAttachmentType.Photo:\n {\n message = 'Photo(s) uploaded';\n }\n break;\n case UnitAttachmentType.FloorPlan:\n {\n message = 'Floorplan uploaded';\n }\n break;\n }\n }),\n catchError(err => {\n const attachmentType = action.attachmentToEntity?.attachmentType as UnitAttachmentType;\n let message = SnackbarErrorMessage.AddingAttachment;\n switch (attachmentType) {\n case UnitAttachmentType.Photo:\n {\n message = SnackbarErrorMessage.AddingPhoto;\n }\n break;\n case UnitAttachmentType.FloorPlan:\n {\n message = SnackbarErrorMessage.AddingFloorplan;\n }\n break;\n }\n\n this.snackbarService.error(message);\n return of(setUnitAttachmentFail());\n })\n )\n )\n )\n );\n\n deleteUnitAttachment$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteUnitAttachment),\n mergeMap(action =>\n this.unitsService.deleteUnitAttachment(action.unitId, action.attachment.id).pipe(\n switchMap(() =>\n iif(\n () => !!action.attachment?.fileUploadId,\n of(action.attachment?.fileUploadId).pipe(map((fileId: number) => deleteFileFromRepository({ fileId }))),\n of(null)\n )\n ),\n mergeMap(() => [deleteUnitAttachmentSuccess(), getUnitAttachments({ unitId: action.unitId })]),\n tap(() => {\n const attachmentType = action.attachment?.targetAttachmentType as UnitAttachmentType;\n let message = 'Attachment removed';\n switch (attachmentType) {\n case UnitAttachmentType.Photo:\n {\n message = 'Photo deleted';\n }\n break;\n case UnitAttachmentType.FloorPlan:\n {\n message = 'Floorplan deleted';\n }\n break;\n }\n }),\n catchError(() => {\n const attachmentType = action.attachment?.targetAttachmentType as UnitAttachmentType;\n let message = SnackbarErrorMessage.DeletingAttachment;\n switch (attachmentType) {\n case UnitAttachmentType.Photo:\n {\n message = SnackbarErrorMessage.DeletingPhoto;\n }\n break;\n case UnitAttachmentType.FloorPlan:\n {\n message = SnackbarErrorMessage.DeletingFloorplan;\n }\n break;\n }\n\n this.snackbarService.error(message);\n return of(deleteUnitAttachmentFailed());\n })\n )\n )\n )\n );\n\n deleteFileFromRepository$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteFileFromRepository),\n mergeMap(action =>\n this.fileUploadsService.removeFile(action.fileId).pipe(\n map(() => deleteFileFromRepositorySuccess()),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingFile);\n return of(deleteFileFromRepositoryFailed());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private restApiService: RestapiService,\n private snackbarService: SnackbarService,\n private propertiesService: PropertiesService,\n private store: Store<{}>,\n private router: Router,\n private unitsService: UnitsService,\n private fileUploadsService: FileUploadsService\n ) {}\n}\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { PortfolioEffects } from '../effects/portfolio.effects';\nimport * as fromPortfolioReducer from '../reducers/portfolio.reducer';\n\n@NgModule({\n declarations: [],\n imports: [\n EffectsModule.forFeature([PortfolioEffects]),\n StoreModule.forFeature(fromPortfolioReducer.portfolioFeatureKey, fromPortfolioReducer.reducer),\n ],\n})\nexport class PortfolioStoreModule {}\n","import { createAction, props } from '@ngrx/store';\n\nimport {\n RestSharedInspectionSpaceCategory,\n RestSpaceTemplateModel,\n} from '../models/rest-space-template-model.interface';\n\n/* Templates List */\nexport const loadAllSpaceTemplates = createAction('[SpaceTemplate] Load all space template');\nexport const loadAllSpaceTemplatesSuccess = createAction(\n '[SpaceTemplate] All space template loaded successfully',\n props<{ listItems: RestSpaceTemplateModel[] }>()\n);\nexport const loadAllSpaceTemplatesFailed = createAction('[SpaceTemplate] All space template loading failed');\n\n/* Add new space template */\nexport const createNewSpaceTemplate = createAction(\n '[SpaceTemplate] Add new space template',\n props<{ entityDetails: RestSpaceTemplateModel }>()\n);\nexport const updateSpaceTemplateDetails = createAction(\n '[SpaceTemplate] Update new space template',\n props<{ entityDetails: RestSpaceTemplateModel }>()\n);\nexport const updateSpaceTemplateDetailsFailed = createAction('[SpaceTemplate] Update space template failed');\n\n/* Delete space template */\nexport const deleteSpaceTemplate = createAction('[SpaceTemplate] Remove space template', props<{ id: number }>());\nexport const clearSpaceTemplateData = createAction('[SpaceTemplate] Clear space template data');\n\n/* Load categories */\nexport const loadAllCategories = createAction('[SpaceTemplate] Load unit types of exact property');\nexport const loadAllCategoriesSuccess = createAction(\n '[SpaceTemplate] All unit types loaded successfully',\n props<{ categoriesList: RestSharedInspectionSpaceCategory[] }>()\n);\nexport const loadAllCategoriesFailed = createAction('[SpaceTemplate] All unit types loading failed');\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n clearSpaceTemplateData,\n loadAllCategoriesFailed,\n loadAllCategoriesSuccess,\n loadAllSpaceTemplates,\n loadAllSpaceTemplatesFailed,\n loadAllSpaceTemplatesSuccess,\n} from './space-template.actions';\nimport {\n RestSharedInspectionSpaceCategory,\n RestSpaceTemplateModel,\n} from '../models/rest-space-template-model.interface';\n\nexport const spaceTemplateFeatureKey = 'space-template';\n\nexport interface SpaceTemplateState {\n listItemsLoading?: boolean;\n listItems?: RestSpaceTemplateModel[];\n categories?: RestSharedInspectionSpaceCategory[];\n\n entityUpdateOngoing?: boolean;\n deleteEntityOngoing?: boolean;\n}\n\nexport const initialState: SpaceTemplateState = {\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n /* Templates List */\n on(loadAllSpaceTemplates, (state, action) => ({ ...state, listItemsLoading: true })),\n on(loadAllSpaceTemplatesSuccess, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: action.listItems,\n deleteEntityOngoing: false,\n })),\n on(loadAllSpaceTemplatesFailed, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: [],\n deleteEntityOngoing: false,\n })),\n on(clearSpaceTemplateData, (state, action) => ({\n ...state,\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n })),\n on(loadAllCategoriesSuccess, (state, action) => ({\n ...state,\n categories: action.categoriesList,\n })),\n on(loadAllCategoriesFailed, (state, action) => ({\n ...state,\n unitTypes: [],\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromSpaceTemplate from './space-template.reducer';\n\nexport const selectSpaceTemplateState = createFeatureSelector(\n fromSpaceTemplate.spaceTemplateFeatureKey\n);\n\nexport const selectSpaceTemplates = createSelector(\n selectSpaceTemplateState,\n spaceTemplateState => spaceTemplateState.listItems\n);\n\nexport const selectSpaceTemplatesLoading = createSelector(\n selectSpaceTemplateState,\n spaceTemplateState => spaceTemplateState.listItemsLoading\n);\n\nexport const selectTemplateUpdate = createSelector(\n selectSpaceTemplateState,\n spaceTemplateState => spaceTemplateState.entityUpdateOngoing\n);\n\nexport const selectTemplateDeleteOngoing = createSelector(\n selectSpaceTemplateState,\n spaceTemplateState => spaceTemplateState.deleteEntityOngoing\n);\n\nexport const selectCategories = createSelector(\n selectSpaceTemplateState,\n spaceTemplateState => spaceTemplateState.categories\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestSurveyTemplate } from '@main-application/survey-creator/interfaces/survey-template';\nimport { RestTemplateAreaModel } from '@template/models/rest-template-model.interface';\n\n/* Survey template */\nexport const loadSurveyTemplates = createAction('[Surveys] loadSurveyTemplates');\nexport const saveSurveyTemplate = createAction(\n '[Surveys] saveSurveyTemplate',\n props<{ id: number; template: string }>()\n);\n\nexport const saveSurveyTemplateSuccess = createAction(\n '[Surveys] saveSurveyTemplateSuccess',\n props<{ templates: RestSurveyTemplate[] }>()\n);\n\nexport const saveSurveyTemplateFailure = createAction('[Surveys] saveSurveyTemplateFailure', props<{ error: any }>());\n\nexport const loadSurveyTemplatesSuccess = createAction(\n '[Surveys] loadSurveyTemplatesSuccess',\n props<{ templates: RestSurveyTemplate[] }>()\n);\n\nexport const loadSurveyTemplatesFailure = createAction('[Surveys] loadSurveyTemplatesFailure', props<{ error: any }>());\n\n/* Inspection survey template */\nexport const addInspectionSurveyTemplate = createAction(\n '[Surveys] addInspectionSurveyTemplate',\n props<{ survey: RestTemplateAreaModel }>()\n);\n\nexport const updateInspectionSurveyTemplate = createAction(\n '[Surveys] updateInspectionSurveyTemplate',\n props<{ survey: RestTemplateAreaModel }>()\n);\n\nexport const saveInspectionSurveyTemplateSuccess = createAction(\n '[Surveys] saveInspectionSurveyTemplateSuccess',\n props<{ surveyId: number }>()\n);\n\nexport const saveInspectionSurveyTemplateFailure = createAction(\n '[Surveys] saveInspectionSurveyTemplateFailure',\n props<{ error: any }>()\n);\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, map, mergeMap, switchMap, tap } from 'rxjs/operators';\n\nimport { SurveysService } from '@app/services/surveys.service';\nimport {\n addInspectionSurveyTemplate,\n loadSurveyTemplates,\n loadSurveyTemplatesFailure,\n loadSurveyTemplatesSuccess,\n saveInspectionSurveyTemplateFailure,\n saveInspectionSurveyTemplateSuccess,\n saveSurveyTemplate,\n saveSurveyTemplateFailure,\n saveSurveyTemplateSuccess,\n updateInspectionSurveyTemplate,\n} from '@main-application/survey-creator/actions/surveys.actions';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { TEMPLATE_VIEWS } from '@template/models/template-views';\nimport { loadAllUserTemplates } from '@template/store/template.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable()\nexport class SurveysEffects {\n loadSurveyTemplates$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadSurveyTemplates),\n switchMap(() =>\n this.surveysService.getSurveyTemplates().pipe(\n map(templates => {\n return loadSurveyTemplatesSuccess({ templates });\n }),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorSurveysTemplates);\n return of(loadSurveyTemplatesFailure({ error }));\n })\n )\n )\n )\n );\n\n saveSurveyTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(saveSurveyTemplate),\n switchMap(action =>\n this.surveysService.saveTemplate(action.id, action.template).pipe(\n map(templates => {\n this.snackbarService.success(SnackbarErrorMessage.SuccessSavingSurveyTemplate);\n return saveSurveyTemplateSuccess({ templates });\n }),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorSavingSurveyTemplate);\n return of(saveSurveyTemplateFailure({ error }));\n })\n )\n )\n )\n );\n\n addInspectionSurveyTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(addInspectionSurveyTemplate),\n switchMap(action =>\n this.surveysService.add(action.survey).pipe(\n tap(id => {\n this.router\n .navigate([AppRoutes.SETTINGS_TEMPLATE, action.survey.inspectionTemplateId, TEMPLATE_VIEWS.AREA, id], {\n queryParamsHandling: 'preserve',\n })\n .then();\n }),\n map(id => {\n this.snackbarService.success(SnackbarErrorMessage.SuccessSavingSurveyTemplate);\n return saveInspectionSurveyTemplateSuccess({ surveyId: id });\n }),\n mergeMap(() => [loadAllUserTemplates()]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorSavingSurveyTemplate);\n return of(saveInspectionSurveyTemplateFailure({ error }));\n })\n )\n )\n )\n );\n\n updateInspectionSurveyTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateInspectionSurveyTemplate),\n switchMap(action =>\n this.surveysService.update(action.survey).pipe(\n map(() => {\n this.snackbarService.success(SnackbarErrorMessage.SuccessSavingSurveyTemplate);\n return saveInspectionSurveyTemplateSuccess({ surveyId: action.survey.id });\n }),\n mergeMap(() => [loadAllUserTemplates()]),\n catchError(error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorSavingSurveyTemplate);\n return of(saveInspectionSurveyTemplateFailure({ error }));\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private router: Router,\n private surveysService: SurveysService,\n private snackbarService: SnackbarService\n ) {}\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport { loadSurveyTemplatesSuccess } from '@main-application/survey-creator/actions/surveys.actions';\nimport { RestSurveyTemplate } from '@main-application/survey-creator/interfaces/survey-template';\n\nexport const surveysFeatureKey = 'surveys';\n\nexport interface State {\n surveyTemplates: RestSurveyTemplate[];\n}\n\nexport const initialState: State = {\n surveyTemplates: [],\n};\n\nexport const reducer = createReducer(\n initialState,\n on(loadSurveyTemplatesSuccess, (state, action) => ({\n ...state,\n surveyTemplates: action.templates,\n }))\n);\n","export enum TEMPLATE_VIEWS {\n NEW_TEMPLATE = 'new-template',\n NEW_AREA = 'new-area',\n AREA = 'area',\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, mergeMap, tap } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { SurveysService } from '@app/services/surveys.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport {\n createTemplateDetails,\n deleteTemplate,\n loadAllUnitTypes,\n loadAllUnitTypesFailed,\n loadAllUnitTypesSuccess,\n loadAllUserTemplates,\n loadAllUserTemplatesFailed,\n loadAllUserTemplatesSuccess,\n removeAreaFromTemplate,\n updateTemplateDetails,\n updateTemplateDetailsFailed,\n} from '@template/store/template.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable()\nexport class TemplateEffects {\n loadAllTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllUserTemplates),\n mergeMap(() =>\n this.restApiService\n .getData(`inspections/template/list?filterUnavailableTemplates=false`)\n .pipe(\n map(result => loadAllUserTemplatesSuccess({ listItems: result || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingTemplatesList);\n return of(loadAllUserTemplatesFailed());\n })\n )\n )\n )\n );\n\n loadAllUnitTypes$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadAllUnitTypes),\n exhaustMap(action =>\n this.restApiService.getData(`properties/${action.propertyId}/unitTypes`).pipe(\n map(result => loadAllUnitTypesSuccess({ unitTypes: result || [] })),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingUnitTypes);\n return of(loadAllUnitTypesFailed());\n })\n )\n )\n )\n );\n\n updateTemplateDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(updateTemplateDetails),\n mergeMap(action =>\n this.restApiService.post(`inspections/template/edit`, action.entityDetails).pipe(\n mergeMap(templateDetails => [loadAllUserTemplates()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingTemplate);\n return of(updateTemplateDetailsFailed());\n })\n )\n )\n )\n );\n\n removeAreaFromTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(removeAreaFromTemplate),\n mergeMap(action =>\n this.surveyService.delete(action.areaId).pipe(\n mergeMap(() => [loadAllUserTemplates()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.WhileDeletingPropertyFromTemplate);\n return of(updateTemplateDetailsFailed());\n })\n )\n )\n )\n );\n\n createTemplateDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(createTemplateDetails),\n mergeMap(action =>\n this.restApiService.create(`inspections/template/add`, action.entityDetails).pipe(\n tap(id =>\n this.router.navigate([AppRoutes.SETTINGS_TEMPLATE, id], { queryParamsHandling: 'preserve' }).then()\n ),\n mergeMap(() =>\n action.entityDetails.inspectionTemplateAreas\n ? action.entityDetails.inspectionTemplateAreas.map(s => this.surveyService.add({ ...s, id: 0 }))\n : of(undefined)\n ),\n mergeMap(() => [loadAllUserTemplates()]),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.WhileCreatingNewTemplate);\n return of(updateTemplateDetailsFailed());\n })\n )\n )\n )\n );\n\n deleteTemplate$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteTemplate),\n mergeMap(action =>\n this.restApiService.post('inspections/template/delete', action.id).pipe(\n map(() => loadAllUserTemplates()),\n catchError(err => {\n if (err?.error?.['ErrorCode'] === 'inspection_template_delete_unavailable') {\n this.snackbarService.error(SnackbarErrorMessage.RemovingTemplateInUse);\n } else {\n this.snackbarService.error(SnackbarErrorMessage.RemovingTemplate);\n }\n\n return of(updateTemplateDetailsFailed(), loadAllUserTemplates());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private restApiService: RestapiService,\n private surveyService: SurveysService,\n private snackbarService: SnackbarService,\n private router: Router\n ) {}\n}\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { SurveysEffects } from '@main-application/survey-creator/effects/surveys.effects';\nimport * as fromSurveyReducer from '@main-application/survey-creator/reducers/surveys.reducer';\n\nimport { TemplateEffects } from './template.effects';\nimport * as fromTemplateReducer from './template.reducer';\n\n@NgModule({\n declarations: [],\n imports: [\n EffectsModule.forFeature([TemplateEffects, SurveysEffects]),\n StoreModule.forFeature(fromTemplateReducer.templateFeatureKey, fromTemplateReducer.reducer),\n StoreModule.forFeature(fromSurveyReducer.surveysFeatureKey, fromSurveyReducer.reducer),\n ],\n})\nexport class TemplateStoreModule {}\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\n/* Templates List */\nexport const loadAllUserTemplates = createAction('[Template] Load all template');\nexport const loadAllUserTemplatesSuccess = createAction(\n '[Template] All template loaded successfully',\n props<{ listItems: RestTemplateModel[] }>()\n);\nexport const loadAllUserTemplatesFailed = createAction('[Template] All template loading failed');\n\n/* Add new template */\nexport const createTemplateDetails = createAction(\n '[Template] Add new template',\n props<{ entityDetails: RestTemplateModel }>()\n);\nexport const updateTemplateDetails = createAction(\n '[Template] Update new template',\n props<{ entityDetails: RestTemplateModel }>()\n);\nexport const updateTemplateDetailsFailed = createAction('[Template] Update template failed');\n\n/* Delete template */\nexport const deleteTemplate = createAction('[Template] Remove template', props<{ id: number }>());\nexport const clearTemplateData = createAction('[Template] Clear template data');\n\n/* Delete template */\nexport const removeAreaFromTemplate = createAction('[Template] Remove area from template', props<{ areaId: number }>());\n/* Load unit types */\nexport const loadAllUnitTypes = createAction(\n '[Template] Load unit types of exact property',\n props<{ propertyId: number }>()\n);\nexport const loadAllUnitTypesSuccess = createAction(\n '[Template] All unit types loaded successfully',\n props<{ unitTypes: string[] }>()\n);\nexport const loadAllUnitTypesFailed = createAction('[Template] All unit types loading failed');\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n addInspectionSurveyTemplate,\n saveInspectionSurveyTemplateSuccess,\n updateInspectionSurveyTemplate,\n} from '@main-application/survey-creator/actions/surveys.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport {\n clearTemplateData,\n createTemplateDetails,\n deleteTemplate,\n loadAllUnitTypesFailed,\n loadAllUnitTypesSuccess,\n loadAllUserTemplates,\n loadAllUserTemplatesFailed,\n loadAllUserTemplatesSuccess,\n removeAreaFromTemplate,\n updateTemplateDetails,\n updateTemplateDetailsFailed,\n} from '@template/store/template.actions';\n\nexport const templateFeatureKey = 'template';\n\nexport interface TemplateState {\n listItemsLoading?: boolean;\n listItems?: RestTemplateModel[];\n unitTypes?: string[];\n\n entityUpdateOngoing?: boolean;\n deleteEntityOngoing?: boolean;\n\n templateAreaUpdateOngoing?: boolean;\n templateAreaRemoveOngoing?: boolean;\n templateAreaUpdateStatus?: UpdateStatus;\n}\n\nexport const initialState: TemplateState = {\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n templateAreaUpdateOngoing: false,\n templateAreaRemoveOngoing: false,\n templateAreaUpdateStatus: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /* Templates List */\n on(loadAllUserTemplates, (state, action) => ({ ...state, listItemsLoading: true })),\n on(loadAllUserTemplatesSuccess, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: action.listItems,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n templateAreaUpdateOngoing: false,\n templateAreaRemoveOngoing: false,\n })),\n on(updateTemplateDetails, createTemplateDetails, (state, action) => ({ ...state, entityUpdateOngoing: true })),\n on(deleteTemplate, (state, action) => ({ ...state, deleteEntityOngoing: true })),\n on(updateTemplateDetailsFailed, (state, action) => ({ ...state, deleteEntityOngoing: false })),\n on(clearTemplateData, (state, action) => ({\n ...state,\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n templateAreaUpdateOngoing: false,\n templateAreaRemoveOngoing: false,\n templateAreaUpdateStatus: null,\n })),\n on(loadAllUserTemplatesFailed, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: [],\n deleteEntityOngoing: false,\n })),\n\n /* Template Survey & Area */\n on(addInspectionSurveyTemplate, updateInspectionSurveyTemplate, (state, action) => ({\n ...state,\n templateAreaUpdateOngoing: true,\n templateAreaUpdateStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(saveInspectionSurveyTemplateSuccess, (state, action) => ({\n ...state,\n templateAreaUpdateStatus: UpdateStatus.UPDATED,\n })),\n on(removeAreaFromTemplate, (state, action) => ({ ...state, templateAreaRemoveOngoing: true })),\n\n /* Unit types */\n on(loadAllUnitTypesSuccess, (state, action) => ({\n ...state,\n unitTypes: action.unitTypes,\n })),\n on(loadAllUnitTypesFailed, (state, action) => ({\n ...state,\n unitTypes: [],\n }))\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestBulkScopeAndBidModel } from '@shared/interfaces/rest-bulk-scope-and-bid-model';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\n\n/**\n * get bulk scope list\n */\nexport const getBulkScopeList = createAction('[Turnover] get bulk scope list', props<{ propertyId: number }>());\nexport const getBulkScopeListSuccess = createAction(\n '[Turnover] get bulk scope list success',\n props<{ bulkList: RestBulkScopeAndBidModel[] }>()\n);\nexport const getBulkScopeListFailed = createAction('[Turnover] get bulk scope list failed');\n\n/**\n * get bulk scope\n */\nexport const getBulkScope = createAction('[Turnover] get bulk scope', props<{ bulkScopeId: number }>());\nexport const getBulkScopeSuccess = createAction(\n '[Turnover] get bulk scope success',\n props<{ bulkScope: RestBulkScopeAndBidModel }>()\n);\nexport const getBulkScopeFailed = createAction('[Turnover] get bulk scope failed');\n\n/**\n * update bulk scope\n */\nexport const updateBulkScope = createAction(\n '[Turnover] update bulk scope',\n props<{ bulkScope: RestBulkScopeAndBidModel }>()\n);\nexport const updateBulkScopeSuccess = createAction('[Turnover] update bulk scope success');\nexport const updateBulkScopeFailed = createAction('[Turnover] update bulk scope failed');\nexport const resetUpdateBulkScopeStatus = createAction('[Turnover] reset Update Bulk Scope Status');\n\n/**\n * Create new bulk scope\n */\nexport const createNewBulkScope = createAction(\n '[Turnover] Create new bulk scope',\n props<{ bulkScope: RestBulkScopeAndBidModel }>()\n);\nexport const createNewBulkScopeSuccess = createAction(\n '[Turnover] Create new bulk scope success',\n props<{ bulkScopeId: number }>()\n);\nexport const createNewBulkScopeFailed = createAction('[Turnover] Create new bulk scope failed');\nexport const resetNewBulkScopeID = createAction('[Turnover] reset new bulk scope id');\n\n/**\n * Add units to bulk\n */\nexport const addUnitsToBulk = createAction(\n '[Turnover] add units to bulk',\n props<{ bulkScope: RestBulkScopeAndBidModel }>()\n);\nexport const addUnitsToBulkSuccess = createAction('[Turnover] add units to bulk success');\nexport const addUnitsToBulkFailed = createAction('[Turnover] add units to bulk failed');\n\n/**\n * Add bulk attachments\n */\nexport const addBulkTurnoversAttachment = createAction(\n '[Turnover] add bulk turnover attachment',\n props<{ attachment: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const addBulkTurnoversAttachmentSuccess = createAction('[Turnover] add bulk turnover attachment success');\nexport const addBulkTurnoversAttachmentFailed = createAction('[Turnover] add bulk turnover attachment failed');\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\n/* GET punch by id */\nexport const loadPunchById = createAction('[Punch] Load Punch by id', props<{ punchId: number }>());\nexport const loadPunchByIdFinished = createAction(\n '[Punch] Load Punch by id finished',\n props<{ punch: RestTicketModel }>()\n);\nexport const loadPunchByIdFailed = createAction('[Punch] Load Punch by id failed');\nexport const clearSelectedPunch = createAction('[Punch] Clear selected punch');\n\n/* GET punch by turnoverId */\nexport const loadPunchesByTurnoverId = createAction(\n '[Punch] Load Punchesby turnoverId',\n props<{ turnoverId: number }>()\n);\nexport const loadPunchesByTurnoverIdFinished = createAction(\n '[Punch] Load Punches by turnoverId finished',\n props<{ result: RestTicketModel[] }>()\n);\nexport const loadPunchesByTurnoverIdFailed = createAction('[Punch] Load Punches by turnoverId failed');\nexport const clearPunchesByTurnoverId = createAction('[Punch] Clear Punches by turnoverId');\n\n/* send punch */\nexport const sendPunch = createAction('[Punch] send Punch', props<{ punch: RestTicketModel }>());\nexport const sendPunchFinished = createAction('[Punch] send Punch finished', props<{ punch: RestTicketModel }>());\nexport const sendPunchFailed = createAction('[Punch] send Punch failed');\n","import { createAction, props } from '@ngrx/store';\n\nimport {\n AddUpdateTurnoverBid,\n RestTurnoverBid,\n RestTurnoverBidCategory,\n} from '@shared/interfaces/turnover-bids.interface';\n\nexport const loadTurnoverBids = createAction('[Turnover] loadTurnoverBids', props<{ turnoverId: number }>());\nexport const loadTurnoverBidsSuccess = createAction(\n '[Turnover] createTurnoverBidSuccess',\n props<{ bids: RestTurnoverBid[] }>()\n);\nexport const loadTurnoverBidsFailed = createAction('[Turnover] loadTurnoverBidsFailed');\n\nexport const createTurnoverBid = createAction('[Turnover] createTurnoverBid', props<{ bid: AddUpdateTurnoverBid }>());\nexport const createTurnoverBidSuccess = createAction(\n '[Turnover] createTurnoverBidSuccess success',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const createTurnoverBidFailed = createAction('[Turnover] createTurnoverBidFailed');\n\nexport const acceptTurnoverBid = createAction(\n '[Turnover] acceptTurnoverBid',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const acceptTurnoverBidSuccess = createAction('[Turnover] acceptTurnoverBidSuccess');\nexport const acceptTurnoverBidFailed = createAction('[Turnover] acceptTurnoverBidFailed');\n\nexport const rejectTurnoverBid = createAction(\n '[Turnover] rejectTurnoverBid',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const rejectTurnoverBidSuccess = createAction('[Turnover] rejectTurnoverBidSuccess');\nexport const rejectTurnoverBidFailed = createAction('[Turnover] rejectTurnoverBidFailed');\n\nexport const uploadTurnoverBidInvoice = createAction(\n '[Turnover] uploadTurnoverBidInvoice',\n props<{ bid: RestTurnoverBid; file: File }>()\n);\nexport const uploadTurnoverBidInvoiceSuccess = createAction('[Turnover] uploadTurnoverBidInvoiceSuccess');\nexport const uploadTurnoverBidInvoiceFailed = createAction('[Turnover] uploadTurnoverBidInvoiceFailed');\n\nexport const updateTurnoverBid = createAction('[Turnover] updateTurnoverBid', props<{ bid: AddUpdateTurnoverBid }>());\nexport const updateTurnoverBidSuccess = createAction(\n '[Turnover] updateTurnoverBidSuccess',\n props<{ bid: AddUpdateTurnoverBid }>()\n);\nexport const updateTurnoverBidFailed = createAction('[Turnover] updateTurnoverBidFailed');\n\nexport const removeTurnoverBid = createAction(\n '[Turnover] removeTurnoverBid',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const removeTurnoverBidSuccess = createAction('[Turnover] removeTurnoverBidSuccess');\nexport const removeTurnoverBidFailed = createAction('[Turnover] removeTurnoverBidFailed');\n\nexport const loadTurnoverBidCategories = createAction('[Turnover] loadTurnoverBidCategories');\nexport const loadTurnoverBidCategoriesSuccess = createAction(\n '[Turnover] loadTurnoverBidCategoriesSuccess',\n props<{ categories: RestTurnoverBidCategory[] }>()\n);\nexport const loadTurnoverBidCategoriesFailed = createAction('[Turnover] loadTurnoverBidCategoriesFailed');\n\nexport const addTurnoverBidCategory = createAction('[Turnover] addTurnoverBidCategory', props<{ name: string }>());\nexport const addTurnoverBidCategorySuccess = createAction(\n '[Turnover] addTurnoverBidCategorySuccess',\n props<{ categoryId: number }>()\n);\nexport const addTurnoverBidCategoryFailed = createAction('[Turnover] addTurnoverBidCategoryFailed');\n\nexport const approveTurnoverBid = createAction(\n '[Turnover] approveTurnoverBid',\n props<{ bidId: number; turnoverId: number; approved: boolean | null }>()\n);\nexport const approveTurnoverBidSuccess = createAction('[Turnover] approveTurnoverBidSuccess');\nexport const approveTurnoverBidFailed = createAction('[Turnover] approveTurnoverBidFailed');\n","import { createAction, props } from '@ngrx/store';\n\nimport { TurnoverStepTimer } from '@main-application/turnovers/interfaces/timers.interface';\nimport { ValidationParams } from '@main-application/turnovers/interfaces/validation-params.interface';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestBidModel, RestTypedBidAttachment } from '@shared/interfaces/bid.interface';\nimport { RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { KanbanListItem } from '@shared/interfaces/kanban-list-item.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\nimport {\n PostTurnoverModel,\n RestTicketModel,\n RestTurnoverDataModel,\n RestTypedTicketAttachment,\n RestTypedTurnoverAttachment,\n RestWorkflowInstanceModel,\n TurnoverStepInfo,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\n\n/**\n * Create new Turnover\n */\nexport const createNewTurnover = createAction(\n '[Turnover] Create new Turnover',\n props<{ postTurnoverModel: PostTurnoverModel }>()\n);\nexport const createNewTurnoverSuccess = createAction(\n '[Turnover] Create new Turnover success',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const createNewTurnoverFailed = createAction('[Turnover] Create new Turnover failed');\nexport const resetCreateNewTurnover = createAction('[Turnover] Reset create new Turnover');\n\n/**\n * Get Turnover Data\n */\nexport const clearTurnoverData = createAction('[Turnover] clear turnover data');\nexport const getTurnoverData = createAction('[Turnover] get turnover data', props<{ turnoverId: number }>());\nexport const getTurnoverDataSuccess = createAction(\n '[Turnover] get turnover data success',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const getTurnoverDataFailed = createAction('[Turnover] get turnover data failed');\n\n/**\n * set current workflow step\n */\nexport const setCurrentWorkflowStep = createAction(\n '[Turnover] set current workflow step',\n props<{ currentWorkflowStep: WorkflowStepEnumType }>()\n);\n\nexport const setCurrentWorkflowStepModel = createAction(\n '[Turnover] set current workflow step model',\n props<{ currentWorkflowStepModel: RestWorkflowInstanceModel }>()\n);\n\nexport const resetWorkflowStepStatus = createAction('[Turnover] set current workflow step');\n\n/**\n * Get Turnover Data\n */\nexport const setTurnoverData = createAction(\n '[Turnover] set turnover data',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const setTurnoverDataSuccess = createAction('[Turnover] set turnover data success');\nexport const setTurnoverDataFailed = createAction('[Turnover] set turnover data failed');\n\n/**\n * Set workflow step\n */\nexport const setWorkflowStepSuccess = createAction(\n '[Turnover] set workflow step success',\n props<{ turnoverId: number; nextWorkflowStep: WorkflowStepEnumType }>()\n);\n/**\n * set appliance type list\n */\nexport const setApplianceTypeList = createAction(\n '[Turnover] set appliance type list',\n props<{ applianceTypeList: IRadioButtonOption[] }>()\n);\n\n/**\n * set color type list\n */\nexport const setColorTypeList = createAction(\n '[Turnover] set color type list',\n props<{ colorTypeList: IRadioButtonOption[] }>()\n);\n\n/**\n * set user list\n */\nexport const setUserList = createAction(\n '[Turnover] set user list',\n props<{ userList: IRadioButtonOption[] }>()\n);\n\nexport const setUserListModel = createAction(\n '[Turnover] set user list model',\n props<{ userListModel: RestUserModel[] }>()\n);\n\n/**\n * set all user list\n */\nexport const setAllUserRadioList = createAction(\n '[Turnover] set All User Radio List',\n props<{ allUserRadioList: IRadioButtonOption[] }>()\n);\nexport const setAllUserList = createAction('[Turnover] set All User List', props<{ allUserList: RestUserModel[] }>());\n\n/**\n * set company radio list\n */\nexport const setCompanyRadioList = createAction(\n '[Turnover] set company radio List',\n props<{ companyRadioList: IRadioButtonOption[] }>()\n);\n\nexport const setCompanyNameRadioList = createAction(\n '[Turnover] set company name radio List',\n props<{ companyNameRadioList: IRadioButtonOption[] }>()\n);\n\nexport const setCompanyEmailRadioList = createAction(\n '[Turnover] set company email radio List',\n props<{ companyEmailRadioList: IRadioButtonOption[] }>()\n);\n\n/**\n * set attachment to turnover\n */\nexport const setAttachmentToTurnover = createAction(\n '[Turnover] attachment to turnover',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel; preventReloadList?: boolean }>()\n);\nexport const setAttachmentToTurnoverSuccess = createAction(\n '[Turnover] attachment to turnover Success',\n props<{ addedAttachment: RestGenericTypedAttachment }>()\n);\nexport const setAttachmentToTurnoverFailed = createAction('[Turnover] attachment to turnover Failed');\nexport const clearAddedAttachment = createAction('[Turnover] clear Added Attachment');\n\n/**\n * update turnover attachment\n */\nexport const updateTurnoverAttachment = createAction(\n '[Turnover] update turnover attachment',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const updateTurnoverAttachmentSuccess = createAction('[Turnover] update turnover attachment Success');\nexport const updateTurnoverAttachmentFailed = createAction('[Turnover] update turnover attachment Failed');\n\n/**\n * get turnover tickets\n */\nexport const getTurnoverTickets = createAction('[Turnover] get turnover tickets', props<{ turnoverId: number }>());\nexport const getTurnoverTicketsSuccess = createAction(\n '[Turnover] get turnover tickets success',\n props<{ turnoverTicketList: RestTicketModel[] }>()\n);\nexport const getTurnoverTicketsFailed = createAction('[Turnover] get turnover tickets error');\n\n/**\n * add new turnover ticket\n */\nexport const addNewTurnoverTicket = createAction(\n '[Turnover] add new turnover tickets',\n props<{ turnoverTicket: RestTicketModel }>()\n);\nexport const addNewTurnoverTicketSuccess = createAction(\n '[Turnover] add new turnover tickets success',\n props<{ newTurnoverTicket: RestTicketModel }>()\n);\nexport const addNewTurnoverTicketFailed = createAction('[Turnover] add new turnover tickets error');\nexport const resetNewTurnoverTicket = createAction('[Turnover] reset new turnover ticket');\n\n/**\n * update turnover ticket\n */\nexport const updateTurnoverTicket = createAction(\n '[Turnover] update turnover tickets',\n props<{ turnoverTicket: RestTicketModel }>()\n);\nexport const updateTurnoverTicketSuccess = createAction(\n '[Turnover] update turnover tickets success',\n props<{ editedTicket: RestTicketModel }>()\n);\nexport const updateTurnoverTicketFailed = createAction('[Turnover] update turnover tickets error');\n\n/**\n * update ticket preview\n */\nexport const updateTicketPreview = createAction(\n '[Turnover] update turnover preview',\n props<{ turnoverTicket: RestTicketModel }>()\n);\nexport const updateTicketPreviewSuccess = createAction(\n '[Turnover] update turnover preview success',\n props<{ editedTicket: RestTicketModel }>()\n);\nexport const updateTicketPreviewFailed = createAction('[Turnover] update turnover preview error');\n\n/**\n * get selected ticket\n */\nexport const getSelectedTicket = createAction('[Turnover] get selected ticket', props<{ ticketId: number }>());\nexport const getSelectedTicketSuccess = createAction(\n '[Turnover] get selected ticket success',\n props<{ ticket: RestTicketModel }>()\n);\nexport const getSelectedTicketFailed = createAction('[Turnover] get selected ticket error');\n\n/**\n * delete turnover ticket\n */\nexport const deleteTurnoverTicket = createAction('[Turnover] delete turnover tickets', props<{ ticketId: number }>());\nexport const deleteTurnoverTicketSuccess = createAction('[Turnover] delete turnover ticket success');\nexport const deleteTurnoverTicketFailed = createAction('[Turnover] delete turnover ticket error');\n\n/**\n * delete turnover ticket attachment\n */\nexport const deleteTurnoverTicketAttachment = createAction(\n '[Turnover] delete turnover tickets attachment',\n props<{ ticketId: number; attachment: RestGenericTypedAttachment; ticketType: TicketType }>()\n);\nexport const deleteTurnoverTicketAttachmentSuccess = createAction(\n '[Turnover] delete turnover ticket attachment success'\n);\nexport const deleteTurnoverTicketAttachmentFailed = createAction('[Turnover] delete turnover ticket attachment error');\n\n/**\n * set turnover attachment\n */\nexport const setTicketAttachment = createAction(\n '[Turnover] set ticket attachment',\n props<{ ticketType: TicketType; attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const setTicketAttachmentSuccess = createAction(\n '[Turnover] set ticket attachment success',\n props<{ addedTicketAttachment: RestTypedTicketAttachment }>()\n);\nexport const setTicketAttachmentFail = createAction('[Turnover] set ticket attachment fail');\nexport const clearAddedTicketAttachment = createAction('[Turnover] clear Added ticket Attachment');\n\n/**\n * get company list\n */\nexport const getCompanyList = createAction('[Turnover] get company list');\nexport const getCompanyListSuccess = createAction(\n '[Turnover] get company list success',\n props<{ companyList: RestCompanyModel[] }>()\n);\nexport const getCompanyListFail = createAction('[Turnover] get company list fail');\n\n/**\n * BIDS\n */\n\n/**\n * get bid turnover list\n */\nexport const getBidTurnoverList = createAction('[Turnover] get bid turnover list', props<{ turnoverId: number }>());\nexport const getBidTurnoverListSuccess = createAction(\n '[Turnover] get bid turnover list success',\n props<{ bidList: RestBidModel[] }>()\n);\nexport const getBidTurnoverListFail = createAction('[Turnover] get bid turnover list fail');\n\n/**\n * get bid company list\n */\nexport const getBidCompanyList = createAction('[Turnover] get bid Company list', props<{ companyId: number }>());\nexport const getBidCompanyListSuccess = createAction(\n '[Turnover] get bid Company list success',\n props<{ bidList: RestBidModel[] }>()\n);\nexport const getBidCompanyListFail = createAction('[Turnover] get bid Company list fail');\n\n/**\n * get all bid list\n */\nexport const getAllBidList = createAction('[Turnover] get all bid list');\nexport const getAllBidListSuccess = createAction(\n '[Turnover] get all bid list success',\n props<{ bidList: RestBidModel[] }>()\n);\nexport const getAllBidListFail = createAction('[Turnover] get all bid list fail');\n\n/**\n * get bid\n */\nexport const getBid = createAction('[Turnover] get bid', props<{ bidId: number }>());\nexport const clearBid = createAction('[Turnover] clear bid');\nexport const getBidSuccess = createAction('[Turnover] get bid success', props<{ bid: RestBidModel }>());\nexport const getBidFail = createAction('[Turnover] get bid fail');\n\n/**\n * add new bid\n */\nexport const addNewBid = createAction('[Turnover] add new bid', props<{ bidList: RestBidModel[] }>());\nexport const addNewBidSuccess = createAction('[Turnover] add new bid success', props<{ newBidList: RestBidModel[] }>());\nexport const addNewBidFail = createAction('[Turnover] add new bid fail');\nexport const clearNewBidList = createAction('[Turnover] clear New Bid List');\nexport const newBidInProgress = createAction(\n '[Turnover] new Bid In Progress',\n props<{ newBidListInProgress: boolean }>()\n);\n\n/**\n * update bid\n */\nexport const updateBid = createAction('[Turnover] update bid', props<{ bid: RestBidModel }>());\nexport const updateBidSuccess = createAction('[Turnover] update bid success', props<{ updatedBid: RestBidModel }>());\nexport const updateBidFail = createAction('[Turnover] update bid fail');\nexport const clearUpdatedBid = createAction('[Turnover] clear updated bid');\n\n/**\n * reject bid\n */\nexport const rejectBid = createAction('[Turnover] reject bid', props<{ id: number }>());\nexport const rejectBidSuccess = createAction('[Turnover] reject bid success', props<{ updatedBid: RestBidModel }>());\nexport const rejectBidFail = createAction('[Turnover] reject bid fail');\n\n/**\n * update bid comment\n */\nexport const updateBidComment = createAction('[Turnover] update bid comment', props<{ bid: RestBidModel }>());\nexport const updateBidCommentSuccess = createAction(\n '[Turnover] update bid comment success',\n props<{ updatedBid: RestBidModel }>()\n);\nexport const updateBidCommentFail = createAction('[Turnover] update bid comment fail');\n\n/**\n * set bid attachment\n */\nexport const setBidAttachment = createAction(\n '[Turnover] set bid attachment',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const setBidAttachmentSuccess = createAction(\n '[Turnover] set bid attachment success',\n props<{ addedBidAttachment: RestTypedBidAttachment }>()\n);\nexport const setBidAttachmentFail = createAction('[Turnover] set bid attachment fail');\nexport const clearAddedBidAttachment = createAction('[Turnover] clear Added bid Attachment');\n\n/**\n * delete bid attachment\n */\nexport const deleteBidAttachment = createAction(\n '[Turnover] delete bid attachment',\n props<{ bidId: number; attachment: RestTypedBidAttachment }>()\n);\nexport const deleteBidAttachmentSuccess = createAction('[Turnover] delete bid attachment success');\nexport const deleteBidAttachmentFailed = createAction('[Turnover] delete bid attachment error');\n\n/**\n * get bid attachment list\n */\nexport const getBidAttachmentList = createAction('[Turnover] get bid attachment list', props<{ bidId: number }>());\nexport const getBidAttachmentListSuccess = createAction(\n '[Turnover] get bid attachment list success',\n props<{ allAttachments: RestTypedBidAttachment[] }>()\n);\nexport const getBidAttachmentListFailed = createAction('[Turnover] get bid attachment list error');\n\n/**\n * get appliance\n */\nexport const getAppliance = createAction('[Turnover] get appliance', props<{ applianceId: number }>());\nexport const getApplianceSuccess = createAction(\n '[Turnover] get appliance success',\n props<{ appliance: RestApplianceModel }>()\n);\nexport const getApplianceFailed = createAction('[Turnover] get appliance failed');\n\n/**\n * get workflow step comment list\n */\nexport const getWorkflowStepCommentList = createAction(\n '[Turnover] get workflow step comment list',\n props<{ turnoverId: number }>()\n);\nexport const clearWorkflowStepCommentList = createAction('[Turnover] clear workflow step comment list');\nexport const getWorkflowStepCommentListSuccess = createAction(\n '[Turnover] get workflow step comment list success',\n props<{ workflowStepCommentList: RestWorkflowStepCommentModel[] }>()\n);\nexport const getWorkflowStepCommentListFailed = createAction('[Turnover] get workflow step comment list failed');\n\n/**\n * add workflow step comment\n */\nexport const addWorkflowStepComment = createAction(\n '[Turnover] add workflow step comment',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const addWorkflowStepCommentSuccess = createAction(\n '[Turnover] add workflow step comment success',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const addWorkflowStepCommentFailed = createAction('[Turnover] add workflow step comment failed');\n\n/**\n * update workflow step comment\n */\nexport const updateWorkflowStepComment = createAction(\n '[Turnover] update workflow step comment',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const updateWorkflowStepCommentSuccess = createAction(\n '[Turnover] update workflow step comment success',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const updateWorkflowStepCommentFailed = createAction('[Turnover] update workflow step comment failed');\n\n/**\n * delete workflow step comment\n */\nexport const deleteWorkflowStepComment = createAction(\n '[Turnover] delete workflow step comment',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const deleteWorkflowStepCommentSuccess = createAction('[Turnover] delete workflow step comment success');\nexport const deleteWorkflowStepCommentFailed = createAction('[Turnover] delete workflow step comment failed');\n\n/**\n * delete turnover\n */\nexport const deleteTurnover = createAction('[Turnover] delete turnover', props<{ turnoverId: number }>());\nexport const deleteTurnoverSuccess = createAction('[Turnover] delete turnover success');\nexport const deleteTurnoverFailed = createAction('[Turnover] delete turnover failed');\n\n/**\n * delete turnover attachment\n */\nexport const deleteTurnoverAttachment = createAction(\n '[Turnover] delete turnover attachment',\n props<{ attachment: RestTypedTurnoverAttachment }>()\n);\nexport const deleteTurnoverAttachmentSuccess = createAction('[Turnover] delete turnover attachment success');\nexport const deleteTurnoverAttachmentFailed = createAction('[Turnover] delete turnover attachment failed');\n\n/**\n * delete file from repository\n */\nexport const deleteFileFromRepository = createAction(\n '[Turnover] delete file from repository',\n props<{ fileId: number }>()\n);\nexport const deleteFileFromRepositorySuccess = createAction('[Turnover] delete file from repository success');\nexport const deleteFileFromRepositoryFailed = createAction('[Turnover] delete file from repository failed');\n\n/**\n * get turnover attachments\n */\nexport const getTurnoverAttachments = createAction(\n '[Turnover] get turnover attachments',\n props<{ turnoverId: number }>()\n);\nexport const getTurnoverAttachmentsSuccess = createAction(\n '[Turnover] get turnover attachments success',\n props<{ allAttachments: RestTypedTurnoverAttachment[] }>()\n);\nexport const getTurnoverAttachmentsFailed = createAction('[Turnover] get turnover attachments failed');\nexport const clearTurnoverAttachments = createAction('[Turnover] clear turnover attachments');\n\n/**\n * get ticket\n */\nexport const getTicket = createAction('[Turnover] get ticket', props<{ ticketId: number }>());\nexport const getTicketSuccess = createAction(\n '[Turnover] get ticket success',\n props<{ restTicketModel: RestTicketModel }>()\n);\nexport const getTicketFailed = createAction('[Turnover] get ticket failed');\n\n/**\n * get ticket attachments\n */\nexport const getTicketAttachments = createAction('[Turnover] get ticket attachments', props<{ ticketId: number }>());\nexport const getTicketAttachmentsSuccess = createAction(\n '[Turnover] get ticket attachments success',\n props<{ ticketAttachments: RestTypedTicketAttachment[] }>()\n);\nexport const getTicketAttachmentsFailed = createAction('[Turnover] get ticket attachments failed');\n\n/**\n * clear ticket preview\n */\nexport const clearTicketPreview = createAction('[Turnover] clear ticket preview');\n\n/**\n * set step Info\n */\nexport const setStepInfo = createAction('[Turnover] set step Info', props<{ stepInfo: TurnoverStepInfo }>());\n\n/**\n * clean store\n */\nexport const cleanTurnoverStore = createAction('[Turnover] clean store');\n\nexport const loadWorkflowAssignmentsByPropertyAndStepId = createAction(\n '[Turnover] get workflow assigments by propertyId and stepId',\n props<{ stepId: WorkflowStepEnumType; propertyId: number }>()\n);\nexport const workflowAssignmentsByPropertyAndStepIdSucceded = createAction(\n '[Turnover] loaded workflow assigments by propertyId and stepId succeeded',\n props<{ workflowStepAssigneeId: number }>()\n);\nexport const workflowAssignmentsByPropertyAndStepIdFailure = createAction(\n '[Turnover] loaded workflow assigments by propertyId and stepId failure'\n);\n\n/**\n * assign default Workflow Step Assignee\n */\nexport const assignDefaultWorkflowStepAssignee = createAction(\n '[Turnover] assign default Workflow Step Assignee',\n props<{ turnoverData: RestTurnoverDataModel; workflowStep: WorkflowStepEnumType; propertyId: number }>()\n);\nexport const assignDefaultWorkflowStepAssigneeSuccess = createAction(\n '[Turnover] assign default Workflow Step Responsible Party success',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const assignDefaultWorkflowStepAssigneeFailed = createAction(\n '[Turnover] assign default Workflow Step Responsible Party failed'\n);\n\nexport const reloadAppliancesNeeded = createAction('[Turnover] reload appliances needed');\n\nexport const reloadAppliancesNeededEnd = createAction('[Turnover] reload appliances needed end');\nexport const emptyAction = createAction('[Turnover] empty action');\n\nexport const inspectTurnover = createAction('[Turnover] inspect Turnover', props<{ inspectTurnoverId: number }>());\n\nexport const updateValidationParams = createAction(\n '[Turnover] update Validation Params',\n props<{ validationParams: ValidationParams }>()\n);\n\n/**\n * set step assignee\n */\nexport const setStepAssignee = createAction(\n '[Turnover] set step assignee',\n props<{ workflowAction: WorkflowAction }>()\n);\nexport const setStepAssigneeSuccess = createAction('[Turnover] set step assignee success');\nexport const setStepAssigneeFailed = createAction('[Turnover] set step assignee failed');\n\n/**\n * get default turnovers assignees\n */\nexport const getDefaultTurnoversAssignees = createAction(\n '[Turnover] get default turnovers assignees',\n props<{ propertyId: number }>()\n);\nexport const getDefaultTurnoversAssigneesSuccess = createAction(\n '[Turnover] get default turnovers assignees success',\n props<{ defaultTurnoversAssignees: RestWorkflowStepAssignmentModel[] }>()\n);\nexport const getDefaultTurnoversAssigneesFailed = createAction('[Turnover] get default turnovers assignees failed');\n\n/**\n * counters\n */\nexport const resetKanbanCounters = createAction('[Turnover] reset Kanban Counters');\n\nexport const setAllPropertyIds = createAction('[Turnover] set All Property Ids', props<{ allPropertyIds: number[] }>());\n\nexport const toggleAllSections = createAction('[Turnover] toggle All Sections', props<{ active: boolean }>());\n\nexport const toggleSingleSection = createAction(\n '[Turnover] toggle Single Section',\n props<{ propertyId: number; active: boolean }>()\n);\n\nexport const setActiveSections = createAction(\n '[Turnover] set active Sections',\n props<{ activePropertyIds: number[] }>()\n);\n\nexport const toggleInactiveFilteredSingleSection = createAction(\n '[Turnover] toggle Filtered Single Section',\n props<{ propertyId: number; active: boolean }>()\n);\n\nexport const setInactiveFilteredSections = createAction(\n '[Turnover] set filtered inactive Sections',\n props<{ inactiveFilteredPropertyIds: number[] }>()\n);\n\nexport const setDisplayedPropertyList = createAction(\n '[Turnover] set Displayed Property List',\n props<{ displayedPropertyList: KanbanListItem[] }>()\n);\n\nexport const setSectionLostRevenue = createAction(\n '[Turnover] set section lost revenue',\n props<{ propertyId: number; lostRevenue: number }>()\n);\n\nexport const loadTurnoverTimers = createAction('[Turnover] load timers', props<{ turnoverId: number }>());\nexport const clearTurnoverTimers = createAction('[Turnover] clear timers');\nexport const turnoverTimersLoaded = createAction(\n '[Turnover] timers loaded',\n props<{ turnoverId: number; timers: TurnoverStepTimer[] }>()\n);\nexport const setTurnoverTimers = createAction(\n '[Turnover] set timers',\n props<{ turnoverId: number; timers: TurnoverStepTimer[] }>()\n);\nexport const setTurnoverTimersSuccess = createAction('[Turnover] setTurnoverTimers success');\nexport const setTurnoverTimersFailed = createAction('[Turnover] setTurnoverTimers failed');\n\nexport const setWorkflowStepAssignee = createAction(\n '[Turnover] setWorkflowStepAssignee',\n props<{ turnoverId: number; step: WorkflowStepEnumType; assigneeId: number }>()\n);\nexport const setEmptyWorkflowStepAssignee = createAction(\n '[Turnover] setEmptyWorkflowStepAssignee',\n props<{ turnoverId: number; step: WorkflowStepEnumType; assigneeId: number }>()\n);\n\nexport const setWorkflowStepAssigneeSuccess = createAction('[Turnover] setWorkflowStepAssigneeSuccess');\nexport const setWorkflowStepAssigneeFailed = createAction('[Turnover] setWorkflowStepAssigneeFailed');\n","/*\n * DON'T USE\n * deprecated file, to be removed\n */\nexport enum TurnoverForm {\n START = 'Start',\n END = 'End',\n RANGE = 'Range',\n\n PROPERTY_ID = 'PropertyId',\n UNIT_ID = 'UnitId',\n GENERAL = 'General',\n\n COMPANY_ID_LIST = 'CompanyIdList',\n ID = 'Id',\n\n NAME = 'Name',\n DETAILED_INFORMATION = 'DetailedInformation',\n ASSIGNEE_ID = 'AssigneeId',\n\n TICKET_STATUS_TYPE = 'TicketStatusType',\n TICKET_PRIORITY_TYPE = 'TicketPriorityType',\n WHOLE_OBJECT = 'WholeObject',\n MATERIAL_COST = 'MaterialsCost',\n LABOR_COST = 'LaborCost',\n BID_STATUS_TYPE = 'BidStatusType',\n URL = 'Url',\n\n UNIT_PHOTO = 'UnitPhoto',\n ABLE_TO_RESOLVE = 'AbleToResolve',\n SCOPE_OF_WORK = 'ScopeOfWork',\n\n MOVE_OUT = 'MoveOutDate',\n}\n","export enum VacancyLossAttrType {\n Gross,\n Unit,\n Turn,\n}\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport enum VacancyLostThreshold {\n None,\n Medium,\n High,\n}\nexport const VacancyLostThresholdList: IRadioButtonOption[] = [\n {\n label: 'None',\n value: VacancyLostThreshold.None,\n },\n {\n label: 'Medium',\n value: VacancyLostThreshold.Medium,\n },\n {\n label: 'High',\n value: VacancyLostThreshold.High,\n },\n];\n","import { createReducer, on } from '@ngrx/store';\n\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\nimport {\n clearPunchesByTurnoverId,\n clearSelectedPunch,\n loadPunchByIdFinished,\n loadPunchesByTurnoverId,\n loadPunchesByTurnoverIdFinished,\n} from '../actions/punch.actions';\n\nexport const punchFeatureKey = 'punch';\n\nexport interface PunchState {\n punchesByTurnoverId?: RestTicketModel[];\n punchesByTurnoverIdLoading?: boolean;\n selectedPunch?: RestTicketModel;\n}\n\nexport const initialState: PunchState = {};\n\nexport const reducer = createReducer(\n initialState,\n on(loadPunchesByTurnoverId, (state, action) => ({ ...state, punchesByTurnoverIdLoading: true })),\n on(loadPunchesByTurnoverIdFinished, (state, action) => ({\n ...state,\n punchesByTurnoverIdLoading: false,\n punchesByTurnoverId: action.result,\n })),\n on(clearPunchesByTurnoverId, (state, action) => ({\n ...state,\n punchesByTurnoverIdLoading: false,\n punchesByTurnoverId: null,\n })),\n on(loadPunchByIdFinished, (state, action) => ({ ...state, selectedPunch: action.punch })),\n on(clearSelectedPunch, (state, action) => ({ ...state, selectedPunch: null }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n createTurnoverBid,\n createTurnoverBidFailed,\n createTurnoverBidSuccess,\n loadTurnoverBidCategoriesSuccess,\n loadTurnoverBids,\n loadTurnoverBidsFailed,\n loadTurnoverBidsSuccess,\n} from '@main-application/turnovers/actions/turnover-bids.actions';\nimport { RestTurnoverBid, RestTurnoverBidCategory } from '@shared/interfaces/turnover-bids.interface';\n\nexport const turnoverBidsFeatureKey = 'turnover-bids';\n\nexport interface TurnoverBidsState {\n bidsLoading: boolean;\n bids: RestTurnoverBid[];\n bidCategories: RestTurnoverBidCategory[];\n bidAdding: boolean;\n}\n\nexport const initialState: TurnoverBidsState = {\n bidsLoading: false,\n bids: [],\n bidCategories: [],\n bidAdding: false,\n};\n\nexport const turnoverBidsReducer = createReducer(\n initialState,\n\n // load\n on(loadTurnoverBids, state => ({\n ...state,\n bidsLoading: true,\n })),\n on(loadTurnoverBidsSuccess, (state, action) => ({\n ...state,\n bids: action.bids,\n bidsLoading: false,\n })),\n on(loadTurnoverBidsFailed, state => ({\n ...state,\n bids: [],\n bidsLoading: false,\n })),\n\n // create\n on(createTurnoverBid, state => ({\n ...state,\n bidAdding: true,\n })),\n on(createTurnoverBidSuccess, state => ({\n ...state,\n bidAdding: false,\n })),\n on(createTurnoverBidFailed, state => ({\n ...state,\n bidAdding: false,\n })),\n on(loadTurnoverBidCategoriesSuccess, (state, action) => ({\n ...state,\n bidCategories: action.categories,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n addNewBid,\n addNewBidFail,\n addNewBidSuccess,\n addNewTurnoverTicket,\n addNewTurnoverTicketFailed,\n addNewTurnoverTicketSuccess,\n addWorkflowStepComment,\n addWorkflowStepCommentFailed,\n addWorkflowStepCommentSuccess,\n cleanTurnoverStore,\n clearAddedAttachment,\n clearAddedBidAttachment,\n clearAddedTicketAttachment,\n clearBid,\n clearNewBidList,\n clearTicketPreview,\n clearTurnoverAttachments,\n clearTurnoverData,\n clearTurnoverTimers,\n clearUpdatedBid,\n clearWorkflowStepCommentList,\n createNewTurnover,\n createNewTurnoverFailed,\n createNewTurnoverSuccess,\n deleteBidAttachment,\n deleteBidAttachmentFailed,\n deleteBidAttachmentSuccess,\n deleteFileFromRepositoryFailed,\n deleteFileFromRepositorySuccess,\n deleteTurnover,\n deleteTurnoverAttachment,\n deleteTurnoverAttachmentFailed,\n deleteTurnoverAttachmentSuccess,\n deleteTurnoverFailed,\n deleteTurnoverSuccess,\n deleteTurnoverTicket,\n deleteTurnoverTicketFailed,\n deleteTurnoverTicketSuccess,\n deleteWorkflowStepComment,\n deleteWorkflowStepCommentFailed,\n deleteWorkflowStepCommentSuccess,\n getAllBidList,\n getAllBidListFail,\n getAllBidListSuccess,\n getAppliance,\n getApplianceFailed,\n getApplianceSuccess,\n getBid,\n getBidAttachmentList,\n getBidAttachmentListFailed,\n getBidAttachmentListSuccess,\n getBidCompanyList,\n getBidCompanyListFail,\n getBidCompanyListSuccess,\n getBidFail,\n getBidSuccess,\n getBidTurnoverList,\n getBidTurnoverListFail,\n getBidTurnoverListSuccess,\n getCompanyList,\n getCompanyListFail,\n getCompanyListSuccess,\n getDefaultTurnoversAssignees,\n getDefaultTurnoversAssigneesFailed,\n getDefaultTurnoversAssigneesSuccess,\n getSelectedTicket,\n getSelectedTicketFailed,\n getSelectedTicketSuccess,\n getTicket,\n getTicketAttachments,\n getTicketAttachmentsFailed,\n getTicketAttachmentsSuccess,\n getTicketFailed,\n getTicketSuccess,\n getTurnoverAttachments,\n getTurnoverAttachmentsFailed,\n getTurnoverAttachmentsSuccess,\n getTurnoverData,\n getTurnoverDataFailed,\n getTurnoverDataSuccess,\n getTurnoverTickets,\n getTurnoverTicketsFailed,\n getTurnoverTicketsSuccess,\n getWorkflowStepCommentList,\n getWorkflowStepCommentListFailed,\n getWorkflowStepCommentListSuccess,\n inspectTurnover,\n loadWorkflowAssignmentsByPropertyAndStepId,\n newBidInProgress,\n rejectBid,\n rejectBidFail,\n rejectBidSuccess,\n reloadAppliancesNeeded,\n reloadAppliancesNeededEnd,\n resetCreateNewTurnover,\n resetKanbanCounters,\n resetNewTurnoverTicket,\n resetWorkflowStepStatus,\n setActiveSections,\n setAllPropertyIds,\n setAllUserList,\n setAllUserRadioList,\n setApplianceTypeList,\n setAttachmentToTurnover,\n setAttachmentToTurnoverFailed,\n setAttachmentToTurnoverSuccess,\n setBidAttachment,\n setBidAttachmentFail,\n setBidAttachmentSuccess,\n setColorTypeList,\n setCompanyEmailRadioList,\n setCompanyNameRadioList,\n setCompanyRadioList,\n setCurrentWorkflowStep,\n setCurrentWorkflowStepModel,\n setDisplayedPropertyList,\n setInactiveFilteredSections,\n setSectionLostRevenue,\n setStepAssignee,\n setStepAssigneeFailed,\n setStepAssigneeSuccess,\n setStepInfo,\n setTicketAttachment,\n setTicketAttachmentFail,\n setTicketAttachmentSuccess,\n setUserList,\n setUserListModel,\n setWorkflowStepSuccess,\n turnoverTimersLoaded,\n updateBid,\n updateBidComment,\n updateBidCommentFail,\n updateBidCommentSuccess,\n updateBidFail,\n updateBidSuccess,\n updateTicketPreview,\n updateTicketPreviewFailed,\n updateTicketPreviewSuccess,\n updateTurnoverAttachment,\n updateTurnoverAttachmentFailed,\n updateTurnoverAttachmentSuccess,\n updateTurnoverTicket,\n updateTurnoverTicketFailed,\n updateTurnoverTicketSuccess,\n updateValidationParams,\n updateWorkflowStepComment,\n updateWorkflowStepCommentFailed,\n updateWorkflowStepCommentSuccess,\n workflowAssignmentsByPropertyAndStepIdSucceded,\n} from '@main-application/turnovers/actions/turnovers.actions';\nimport { TurnoverStepTimer } from '@main-application/turnovers/interfaces/timers.interface';\nimport { ValidationParams } from '@main-application/turnovers/interfaces/validation-params.interface';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestBidModel, RestTypedBidAttachment } from '@shared/interfaces/bid.interface';\nimport { RestCommentModel, RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { KanbanListItem } from '@shared/interfaces/kanban-list-item.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\nimport {\n RestTicketModel,\n RestTurnoverDataModel,\n RestTypedTicketAttachment,\n RestTypedTurnoverAttachment,\n RestWorkflowInstanceModel,\n TurnoverStepInfo,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nexport const turnoversFeatureKey = 'turnovers';\n\nexport interface State {\n turnoverData: RestTurnoverDataModel;\n updatedTurnoverData: RestTurnoverDataModel;\n emptyTurnoverData: boolean;\n createTurnoverLoading: boolean;\n createdTurnover: RestTurnoverDataModel;\n turnoverDataLoading: boolean;\n commentItem: RestCommentModel;\n setWorkflowStepStatus: UpdateStatus;\n nextWorkflowStep: WorkflowStepEnumType;\n setWorkflowStepLoading: boolean;\n currentWorkflowStep: WorkflowStepEnumType;\n currentWorkflowStepModel: RestWorkflowInstanceModel;\n applianceTypeList: IRadioButtonOption[];\n colorTypeList: IRadioButtonOption[];\n userList: IRadioButtonOption[];\n userListModel: RestUserModel[];\n companyRadioList: IRadioButtonOption[];\n companyNameRadioList: IRadioButtonOption[];\n companyEmailRadioList: IRadioButtonOption[];\n attachmentToEntity: UpdateTypedAttachmentToEntityModel;\n addBidAttachmentInProgress: boolean;\n addBidAttachmentStatus: UpdateStatus;\n addedAttachment: RestGenericTypedAttachment;\n addedBidAttachment: RestTypedBidAttachment;\n addedTicketAttachment: RestTypedTicketAttachment;\n turnoverTicketList: RestTicketModel[];\n turnoverTicketListLoading: boolean;\n newTurnoverTicket: RestTicketModel;\n newTurnoverTicketLoading: boolean;\n editedTicket: RestTicketModel;\n selectedTicket: RestTicketModel;\n selectedTicketLoading: boolean;\n addNewApplianceNeededLoading: boolean;\n isNewApplianceNeededAdd: boolean;\n markApplianceAsDoneLoading: boolean;\n isMarkApplianceAsDone: boolean;\n companyList: RestCompanyModel[];\n companyListLoading: boolean;\n newBidList: RestBidModel[];\n newBidListInProgress: boolean;\n bidTurnoverList: RestBidModel[];\n bidTurnoverListLoading: boolean;\n bidCompanyList: RestBidModel[];\n bidCompanyListLoading: boolean;\n bid: RestBidModel;\n editedBid: RestBidModel;\n bidLoading: boolean;\n updatedBid: RestBidModel;\n updatedBidLoading: boolean;\n updatedBidCommentLoading: boolean;\n appliance: RestApplianceModel;\n applianceLoading: boolean;\n workflowStepCommentList: RestWorkflowStepCommentModel[];\n workflowStepCommentListLoading: boolean;\n workflowStepCommentUpdateLoading: boolean;\n workflowStepAssigneeId: number;\n workflowStepAssignmentLoading: boolean;\n reloadAppliancesNeeded: boolean;\n deleteTurnoverInProgress: boolean;\n turnoverDeleteStatus: UpdateStatus;\n deleteTurnoverAttachmentInProgress: boolean;\n turnoverDeleteAttachmentStatus: UpdateStatus;\n addTurnoverAttachmentInProgress: boolean;\n addTurnoverAttachmentStatus: UpdateStatus;\n stepInfo: TurnoverStepInfo;\n allAttachments: RestTypedTurnoverAttachment[];\n allAttachmentsLoading: boolean;\n deleteBidAttachmentInProgress: boolean;\n deleteBidAttachmentStatus: UpdateStatus;\n bidAttachments: RestTypedBidAttachment[];\n bidAttachmentsLoading: boolean;\n updateTicketInProgress: boolean;\n updateTurnoverAttachmentInProgress: boolean;\n updateTurnoverAttachmentStatus: UpdateStatus;\n\n allBidList: RestBidModel[];\n allBidListLoading: boolean;\n\n ticket: RestTicketModel;\n ticketLoading: boolean;\n\n ticketAttachments: RestTypedTicketAttachment[];\n ticketAttachmentsLoading: boolean;\n\n ticketUpdateInProgress: boolean;\n ticketUpdateInProgressStatus: UpdateStatus;\n\n inspectTurnoverId: number;\n\n validationParams: ValidationParams;\n\n allPropertyIds: number[];\n activePropertyIds: number[];\n inactiveFilteredPropertyIds: number[];\n\n updateStepAssigneeInProgress: boolean;\n updateStepAssigneeStatus: UpdateStatus;\n\n defaultTurnoversAssignees: RestWorkflowStepAssignmentModel[];\n defaultTurnoversAssigneesLoading: boolean;\n\n allUserRadioList: IRadioButtonOption[];\n allUserList: RestUserModel[];\n displayedPropertyList: KanbanListItem[];\n sectionsLostRevenue: { [key: number]: number };\n rejectBidLoading: boolean;\n\n timers: TurnoverStepTimer[];\n}\n\nexport const initialState: State = {\n turnoverData: null,\n updatedTurnoverData: null,\n emptyTurnoverData: false,\n createTurnoverLoading: false,\n createdTurnover: null,\n turnoverDataLoading: false,\n commentItem: null,\n setWorkflowStepStatus: null,\n nextWorkflowStep: null,\n setWorkflowStepLoading: false,\n currentWorkflowStep: null,\n currentWorkflowStepModel: null,\n applianceTypeList: [],\n colorTypeList: [],\n userList: [],\n userListModel: [],\n companyRadioList: [],\n companyNameRadioList: [],\n companyEmailRadioList: [],\n attachmentToEntity: null,\n addBidAttachmentInProgress: false,\n addBidAttachmentStatus: null,\n addedAttachment: null,\n addedBidAttachment: null,\n addedTicketAttachment: null,\n turnoverTicketList: [],\n turnoverTicketListLoading: false,\n newTurnoverTicket: null,\n newTurnoverTicketLoading: false,\n editedTicket: null,\n selectedTicket: null,\n selectedTicketLoading: false,\n addNewApplianceNeededLoading: false,\n isNewApplianceNeededAdd: false,\n markApplianceAsDoneLoading: false,\n isMarkApplianceAsDone: false,\n companyList: [],\n companyListLoading: false,\n newBidList: [],\n newBidListInProgress: false,\n bidTurnoverList: [],\n bidTurnoverListLoading: false,\n bidCompanyList: [],\n bidCompanyListLoading: false,\n bid: null,\n editedBid: null,\n bidLoading: false,\n updatedBid: null,\n updatedBidLoading: false,\n updatedBidCommentLoading: false,\n appliance: null,\n applianceLoading: false,\n workflowStepCommentList: [],\n workflowStepCommentListLoading: false,\n workflowStepCommentUpdateLoading: false,\n workflowStepAssigneeId: null,\n workflowStepAssignmentLoading: false,\n reloadAppliancesNeeded: false,\n deleteTurnoverInProgress: false,\n turnoverDeleteStatus: null,\n deleteTurnoverAttachmentInProgress: false,\n turnoverDeleteAttachmentStatus: null,\n addTurnoverAttachmentInProgress: false,\n addTurnoverAttachmentStatus: null,\n stepInfo: null,\n allAttachments: [],\n allAttachmentsLoading: false,\n deleteBidAttachmentInProgress: false,\n deleteBidAttachmentStatus: null,\n bidAttachments: [],\n bidAttachmentsLoading: false,\n updateTicketInProgress: false,\n updateTurnoverAttachmentInProgress: false,\n updateTurnoverAttachmentStatus: null,\n\n allBidList: [],\n allBidListLoading: false,\n\n ticket: null,\n ticketLoading: false,\n\n ticketAttachments: [],\n ticketAttachmentsLoading: false,\n\n ticketUpdateInProgress: false,\n ticketUpdateInProgressStatus: null,\n\n inspectTurnoverId: null,\n\n validationParams: {},\n\n allPropertyIds: [],\n activePropertyIds: [],\n inactiveFilteredPropertyIds: [],\n\n updateStepAssigneeInProgress: false,\n updateStepAssigneeStatus: null,\n\n defaultTurnoversAssignees: [],\n defaultTurnoversAssigneesLoading: false,\n\n allUserRadioList: [],\n allUserList: [],\n\n displayedPropertyList: [],\n sectionsLostRevenue: {},\n rejectBidLoading: false,\n\n timers: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * Create new Turnover\n */\n on(createNewTurnover, (state, action) => ({\n ...state,\n createTurnoverLoading: true,\n })),\n on(createNewTurnoverSuccess, (state, action) => ({\n ...state,\n createTurnoverLoading: false,\n createdTurnover: action.turnoverData,\n })),\n on(resetCreateNewTurnover, createNewTurnoverFailed, (state, action) => ({\n ...state,\n createTurnoverLoading: false,\n createdTurnover: null,\n })),\n\n /**\n * Get turnover data\n */\n on(clearTurnoverData, state => ({\n ...state,\n turnoverDataLoading: false,\n emptyTurnoverData: false,\n turnoverData: null,\n })),\n on(getTurnoverData, (state, action) => ({\n ...state,\n turnoverDataLoading: true,\n emptyTurnoverData: false,\n })),\n on(getTurnoverDataSuccess, (state, action) => ({\n ...state,\n turnoverData: action.turnoverData,\n turnoverDataLoading: false,\n emptyTurnoverData: false,\n })),\n on(getTurnoverDataFailed, (state, action) => ({\n ...state,\n turnoverData: null,\n turnoverDataLoading: false,\n emptyTurnoverData: true,\n })),\n /**\n * Set workflow step\n */\n on(setWorkflowStepSuccess, (state, action) => ({\n ...state,\n setWorkflowStepStatus: UpdateStatus.OK,\n nextWorkflowStep: action.nextWorkflowStep,\n setWorkflowStepLoading: false,\n })),\n on(resetWorkflowStepStatus, (state, action) => ({\n ...state,\n setWorkflowStepStatus: null,\n nextWorkflowStep: null,\n })),\n\n /**\n * set current workflow step\n */\n on(setCurrentWorkflowStep, (state, action) => ({\n ...state,\n currentWorkflowStep: action.currentWorkflowStep,\n })),\n\n on(setCurrentWorkflowStepModel, (state, action) => ({\n ...state,\n currentWorkflowStepModel: action.currentWorkflowStepModel,\n })),\n\n /**\n * set attachment to turnover\n */\n on(setAttachmentToTurnover, (state, action) => ({\n ...state,\n attachmentToEntity: action.attachmentToEntity,\n addedAttachment: null,\n addTurnoverAttachmentInProgress: true,\n addTurnoverAttachmentStatus: null,\n })),\n on(setAttachmentToTurnoverSuccess, (state, action) => ({\n ...state,\n addedAttachment: action.addedAttachment,\n addTurnoverAttachmentInProgress: false,\n addTurnoverAttachmentStatus: UpdateStatus.OK,\n })),\n on(setAttachmentToTurnoverFailed, (state, action) => ({\n ...state,\n addedAttachment: null,\n addTurnoverAttachmentInProgress: false,\n addTurnoverAttachmentStatus: UpdateStatus.ERROR,\n })),\n on(clearAddedAttachment, (state, action) => ({\n ...state,\n addedAttachment: null,\n })),\n\n /**\n * update turnover attachment\n */\n on(updateTurnoverAttachment, (state, action) => ({\n ...state,\n updateTurnoverAttachmentInProgress: true,\n updateTurnoverAttachmentStatus: UpdateStatus.UPDATE,\n })),\n on(updateTurnoverAttachmentSuccess, (state, action) => ({\n ...state,\n updateTurnoverAttachmentInProgress: false,\n updateTurnoverAttachmentStatus: UpdateStatus.OK,\n })),\n on(updateTurnoverAttachmentFailed, (state, action) => ({\n ...state,\n updateTurnoverAttachmentInProgress: false,\n updateTurnoverAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * get turnover tickets\n */\n on(getTurnoverTickets, (state, action) => ({\n ...state,\n turnoverTicketListLoading: true,\n })),\n on(getTurnoverTicketsSuccess, (state, action) => ({\n ...state,\n turnoverTicketList: action.turnoverTicketList,\n turnoverTicketListLoading: false,\n })),\n on(getTurnoverTicketsFailed, (state, action) => ({\n ...state,\n turnoverTicketList: [],\n turnoverTicketListLoading: false,\n })),\n\n /**\n * add new turnover ticket\n */\n on(addNewTurnoverTicket, (state, action) => ({\n ...state,\n newTurnoverTicket: null,\n newTurnoverTicketLoading: true,\n })),\n on(addNewTurnoverTicketSuccess, (state, action) => ({\n ...state,\n newTurnoverTicket: action.newTurnoverTicket,\n newTurnoverTicketLoading: false,\n })),\n on(addNewTurnoverTicketFailed, (state, action) => ({\n ...state,\n newTurnoverTicket: null,\n newTurnoverTicketLoading: false,\n })),\n on(resetNewTurnoverTicket, (state, action) => ({\n ...state,\n newTurnoverTicket: null,\n })),\n\n /**\n * update turnover tickets\n */\n on(updateTurnoverTicket, (state, action) => ({\n ...state,\n editedTicket: null,\n updateTicketInProgress: true,\n })),\n on(updateTurnoverTicketSuccess, (state, action) => ({\n ...state,\n editedTicket: action.editedTicket,\n updateTicketInProgress: false,\n })),\n on(updateTurnoverTicketFailed, (state, action) => ({\n ...state,\n editedTicket: null,\n updateTicketInProgress: false,\n })),\n\n /**\n * update ticket preview\n */\n on(updateTicketPreview, (state, action) => ({\n ...state,\n ticketUpdateInProgress: true,\n ticketUpdateInProgressStatus: UpdateStatus.UPDATE,\n })),\n on(updateTicketPreviewSuccess, (state, action) => ({\n ...state,\n ticketUpdateInProgress: false,\n ticketUpdateInProgressStatus: UpdateStatus.OK,\n })),\n on(updateTicketPreviewFailed, (state, action) => ({\n ...state,\n ticketUpdateInProgress: false,\n ticketUpdateInProgressStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * update turnover tickets\n */\n on(getSelectedTicket, (state, action) => ({\n ...state,\n selectedTicket: null,\n selectedTicketLoading: true,\n })),\n on(getSelectedTicketSuccess, (state, action) => ({\n ...state,\n selectedTicket: action.ticket,\n selectedTicketLoading: false,\n })),\n on(getSelectedTicketFailed, (state, action) => ({\n ...state,\n selectedTicket: null,\n selectedTicketLoading: false,\n })),\n\n /**\n * delete turnover tickets\n */\n on(deleteTurnoverTicket, (state, action) => ({\n ...state,\n turnoverTicketListLoading: true,\n })),\n on(deleteTurnoverTicketSuccess, (state, action) => ({\n ...state,\n turnoverTicketListLoading: false,\n })),\n on(deleteTurnoverTicketFailed, (state, action) => ({\n ...state,\n turnoverTicketListLoading: false,\n })),\n\n /**\n * delete bid attachment\n */\n on(deleteBidAttachment, (state, action) => ({\n ...state,\n deleteBidAttachmentInProgress: true,\n deleteBidAttachmentStatus: null,\n })),\n on(deleteBidAttachmentSuccess, (state, action) => ({\n ...state,\n deleteBidAttachmentInProgress: false,\n deleteBidAttachmentStatus: UpdateStatus.DELETED,\n })),\n on(deleteBidAttachmentFailed, (state, action) => ({\n ...state,\n deleteBidAttachmentInProgress: false,\n deleteBidAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * bid attachment list\n */\n on(getBidAttachmentList, (state, action) => ({\n ...state,\n bidAttachmentsLoading: true,\n })),\n on(getBidAttachmentListSuccess, (state, action) => ({\n ...state,\n bidAttachments: action.allAttachments,\n bidAttachmentsLoading: false,\n })),\n on(getBidAttachmentListFailed, (state, action) => ({\n ...state,\n bidAttachments: [],\n bidAttachmentsLoading: false,\n })),\n\n /**\n * set ticket attachment\n */\n on(setTicketAttachment, (state, action) => ({\n ...state,\n attachmentToEntity: action.attachmentToEntity,\n })),\n on(setTicketAttachmentSuccess, (state, action) => ({\n ...state,\n addedTicketAttachment: action.addedTicketAttachment,\n })),\n on(setTicketAttachmentFail, (state, action) => ({\n ...state,\n addedTicketAttachment: null,\n })),\n on(clearAddedTicketAttachment, (state, action) => ({\n ...state,\n addedTicketAttachment: null,\n })),\n\n /**\n * get company list\n */\n on(getCompanyList, (state, action) => ({\n ...state,\n companyListLoading: true,\n })),\n on(getCompanyListSuccess, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: action.companyList,\n })),\n on(getCompanyListFail, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: [],\n })),\n\n /**\n * get Bid Turnover List\n */\n on(getBidTurnoverList, (state, action) => ({\n ...state,\n bidTurnoverListLoading: true,\n })),\n on(getBidTurnoverListSuccess, (state, action) => ({\n ...state,\n bidTurnoverListLoading: false,\n bidTurnoverList: action.bidList,\n })),\n on(getBidTurnoverListFail, (state, action) => ({\n ...state,\n bidTurnoverListLoading: false,\n bidTurnoverList: [],\n })),\n\n /**\n * get bid company list\n */\n on(getBidCompanyList, (state, action) => ({\n ...state,\n bidCompanyListLoading: true,\n })),\n on(getBidCompanyListSuccess, (state, action) => ({\n ...state,\n bidCompanyListLoading: false,\n bidCompanyList: action.bidList,\n })),\n on(getBidCompanyListFail, (state, action) => ({\n ...state,\n bidCompanyListLoading: false,\n bidCompanyList: [],\n })),\n\n /**\n * bid super admin list\n */\n on(getAllBidList, (state, action) => ({\n ...state,\n allBidListLoading: true,\n })),\n on(getAllBidListSuccess, (state, action) => ({\n ...state,\n allBidListLoading: false,\n allBidList: action.bidList,\n })),\n on(getAllBidListFail, (state, action) => ({\n ...state,\n allBidListLoading: false,\n allBidList: [],\n })),\n\n /**\n * get bid\n */\n on(clearBid, state => ({\n ...state,\n bidLoading: false,\n bid: null,\n })),\n on(getBid, (state, action) => ({\n ...state,\n bidLoading: true,\n })),\n on(getBidSuccess, (state, action) => ({\n ...state,\n bidLoading: false,\n bid: action.bid,\n })),\n on(getBidFail, (state, action) => ({\n ...state,\n bidLoading: false,\n bid: null,\n })),\n\n /**\n * add new bid\n */\n on(addNewBid, (state, action) => ({\n ...state,\n newBidList: [],\n newBidListInProgress: true,\n })),\n on(addNewBidSuccess, (state, action) => ({\n ...state,\n newBidList: action.newBidList,\n })),\n on(addNewBidFail, (state, action) => ({\n ...state,\n newBidList: [],\n newBidListInProgress: false,\n })),\n on(clearNewBidList, (state, action) => ({\n ...state,\n newBidList: [],\n })),\n on(newBidInProgress, (state, action) => ({\n ...state,\n newBidListInProgress: action.newBidListInProgress,\n })),\n\n /**\n * update bid\n */\n on(updateBid, (state, action) => ({\n ...state,\n updatedBidLoading: true,\n updatedBid: null,\n })),\n on(updateBidSuccess, (state, action) => ({\n ...state,\n updatedBidLoading: false,\n bid: action.updatedBid,\n updatedBid: action.updatedBid,\n })),\n on(updateBidFail, (state, action) => ({\n ...state,\n updatedBidLoading: false,\n updatedBid: null,\n })),\n on(rejectBid, (state, action) => ({\n ...state,\n rejectBidLoading: true,\n })),\n on(rejectBidSuccess, rejectBidFail, (state, action) => ({\n ...state,\n rejectBidLoading: false,\n })),\n on(clearUpdatedBid, (state, action) => ({\n ...state,\n updatedBid: null,\n })),\n\n /**\n * update bid comment\n */\n on(updateBidComment, (state, action) => ({\n ...state,\n updatedBidCommentLoading: true,\n })),\n on(updateBidCommentSuccess, (state, action) => ({\n ...state,\n updatedBidCommentLoading: false,\n bid: action.updatedBid,\n })),\n on(updateBidCommentFail, (state, action) => ({\n ...state,\n updatedBidCommentLoading: false,\n })),\n\n /**\n * set bid attachment\n */\n on(setBidAttachment, (state, action) => ({\n ...state,\n attachmentToEntity: action.attachmentToEntity,\n addBidAttachmentInProgress: true,\n addBidAttachmentStatus: null,\n })),\n on(setBidAttachmentSuccess, (state, action) => ({\n ...state,\n addedBidAttachment: action.addedBidAttachment,\n addBidAttachmentInProgress: false,\n addBidAttachmentStatus: UpdateStatus.OK,\n })),\n on(setBidAttachmentFail, (state, action) => ({\n ...state,\n addedBidAttachment: null,\n addBidAttachmentInProgress: false,\n addBidAttachmentStatus: UpdateStatus.ERROR,\n })),\n on(clearAddedBidAttachment, (state, action) => ({\n ...state,\n addedBidAttachment: null,\n bidAttachments: [],\n })),\n\n /**\n * get appliance\n */\n on(getAppliance, (state, action) => ({\n ...state,\n applianceLoading: true,\n emptyTurnoverData: false,\n })),\n on(getApplianceSuccess, (state, action) => ({\n ...state,\n appliance: action.appliance,\n applianceLoading: false,\n emptyTurnoverData: false,\n })),\n on(getApplianceFailed, (state, action) => ({\n ...state,\n appliance: null,\n applianceLoading: false,\n emptyTurnoverData: true,\n })),\n\n /**\n * get workflow step comment list\n */\n on(getWorkflowStepCommentList, (state, action) => ({\n ...state,\n workflowStepCommentListLoading: true,\n })),\n on(clearWorkflowStepCommentList, state => ({\n ...state,\n workflowStepCommentList: null,\n workflowStepCommentListLoading: false,\n })),\n on(getWorkflowStepCommentListSuccess, (state, action) => ({\n ...state,\n workflowStepCommentList: action.workflowStepCommentList,\n workflowStepCommentListLoading: false,\n })),\n on(getWorkflowStepCommentListFailed, (state, action) => ({\n ...state,\n workflowStepCommentList: [],\n workflowStepCommentListLoading: false,\n })),\n\n /**\n * add workflow step comment\n */\n on(addWorkflowStepComment, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: true,\n })),\n on(addWorkflowStepCommentSuccess, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n on(addWorkflowStepCommentFailed, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n\n /**\n * update workflow step comment\n */\n on(updateWorkflowStepComment, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: true,\n })),\n on(updateWorkflowStepCommentSuccess, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n on(updateWorkflowStepCommentFailed, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n\n /**\n * delete turnover\n */\n on(deleteTurnover, (state, action) => ({\n ...state,\n deleteTurnoverInProgress: true,\n turnoverDeleteStatus: null,\n })),\n on(deleteTurnoverSuccess, (state, action) => ({\n ...state,\n deleteTurnoverInProgress: false,\n turnoverDeleteStatus: UpdateStatus.DELETED,\n })),\n on(deleteTurnoverFailed, (state, action) => ({\n ...state,\n deleteTurnoverInProgress: false,\n turnoverDeleteStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * delete turnover attachment\n */\n on(deleteTurnoverAttachment, (state, action) => ({\n ...state,\n deleteTurnoverAttachmentInProgress: true,\n turnoverDeleteAttachmentStatus: null,\n })),\n on(deleteTurnoverAttachmentSuccess, (state, action) => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n turnoverDeleteAttachmentStatus: UpdateStatus.DELETED,\n })),\n on(deleteTurnoverAttachmentFailed, (state, action) => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n turnoverDeleteAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * delete file from repository\n */\n on(deleteFileFromRepositorySuccess, (state, action) => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n })),\n on(deleteFileFromRepositoryFailed, (state, action) => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n })),\n\n /**\n * delete workflow step comment\n */\n on(deleteWorkflowStepComment, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: true,\n })),\n on(deleteWorkflowStepCommentSuccess, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n on(deleteWorkflowStepCommentFailed, (state, action) => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n\n /**\n * get turnover attachments\n */\n on(getTurnoverAttachments, (state, action) => ({\n ...state,\n allAttachmentsLoading: true,\n })),\n on(getTurnoverAttachmentsSuccess, (state, action) => ({\n ...state,\n allAttachments: action.allAttachments,\n allAttachmentsLoading: false,\n })),\n on(getTurnoverAttachmentsFailed, clearTurnoverAttachments, (state, action) => ({\n ...state,\n allAttachments: [],\n allAttachmentsLoading: false,\n })),\n /**\n * get ticket\n */\n on(getTicket, (state, action) => ({\n ...state,\n ticketLoading: true,\n })),\n on(getTicketSuccess, (state, action) => ({\n ...state,\n ticket: action.restTicketModel,\n ticketLoading: false,\n })),\n on(getTicketFailed, (state, action) => ({\n ...state,\n ticket: null,\n ticketLoading: false,\n })),\n on(getTicketFailed, (state, action) => ({\n ...state,\n ticket: null,\n ticketLoading: false,\n })),\n\n /**\n * get ticket attachments\n */\n on(getTicketAttachments, (state, action) => ({\n ...state,\n ticketAttachmentsLoading: true,\n })),\n on(getTicketAttachmentsSuccess, (state, action) => ({\n ...state,\n ticketAttachments: action.ticketAttachments,\n ticketAttachmentsLoading: false,\n })),\n on(getTicketAttachmentsFailed, (state, action) => ({\n ...state,\n ticketAttachments: [],\n ticketAttachmentsLoading: false,\n })),\n\n /**\n * clear ticket preview\n */\n on(clearTicketPreview, (state, action) => ({\n ...state,\n ticketAttachments: [],\n ticket: null,\n newTurnoverTicket: null,\n })),\n\n /**\n * RADIO BUTTON DROPDOWN LISTS\n */\n on(setCompanyRadioList, (state, action) => ({\n ...state,\n companyRadioList: action.companyRadioList,\n })),\n on(setCompanyNameRadioList, (state, action) => ({\n ...state,\n companyNameRadioList: action.companyNameRadioList,\n })),\n on(setCompanyEmailRadioList, (state, action) => ({\n ...state,\n companyEmailRadioList: action.companyEmailRadioList,\n })),\n on(setApplianceTypeList, (state, action) => ({\n ...state,\n applianceTypeList: action.applianceTypeList,\n })),\n\n on(setColorTypeList, (state, action) => ({\n ...state,\n colorTypeList: action.colorTypeList,\n })),\n\n on(setUserList, (state, action) => ({\n ...state,\n userList: action.userList,\n })),\n\n on(setUserListModel, (state, action) => ({\n ...state,\n userListModel: action.userListModel,\n })),\n\n on(setAllUserRadioList, (state, action) => ({\n ...state,\n allUserRadioList: action.allUserRadioList,\n })),\n on(setAllUserList, (state, action) => ({\n ...state,\n allUserList: action.allUserList,\n })),\n\n on(cleanTurnoverStore, state => ({\n ...state,\n ...initialState,\n })),\n on(loadWorkflowAssignmentsByPropertyAndStepId, (state, action) => ({\n ...state,\n workflowStepAssignmentLoading: true,\n })),\n on(workflowAssignmentsByPropertyAndStepIdSucceded, (state, action) => ({\n ...state,\n workflowStepAssigneeId: action.workflowStepAssigneeId,\n workflowStepAssignmentLoading: false,\n })),\n on(reloadAppliancesNeeded, (state, action) => ({\n ...state,\n reloadAppliancesNeeded: true,\n })),\n on(reloadAppliancesNeededEnd, (state, action) => ({\n ...state,\n reloadAppliancesNeeded: false,\n })),\n on(setStepInfo, (state, action) => ({\n ...state,\n stepInfo: action.stepInfo,\n })),\n on(inspectTurnover, (state, action) => ({\n ...state,\n inspectTurnoverId: action.inspectTurnoverId,\n })),\n\n on(updateValidationParams, (state, action) => ({\n ...state,\n validationParams: { ...state.validationParams, ...action.validationParams },\n })),\n on(resetKanbanCounters, (state, action) => ({\n ...state,\n allPropertyIds: [],\n })),\n on(setAllPropertyIds, (state, action) => ({\n ...state,\n allPropertyIds: action.allPropertyIds,\n })),\n on(setActiveSections, (state, action) => ({\n ...state,\n activePropertyIds: action.activePropertyIds,\n })),\n\n on(setInactiveFilteredSections, (state, action) => ({\n ...state,\n inactiveFilteredPropertyIds: action.inactiveFilteredPropertyIds,\n })),\n\n on(setStepAssignee, (state, action) => ({\n ...state,\n updateStepAssigneeInProgress: true,\n updateStepAssigneeStatus: UpdateStatus.UPDATE,\n })),\n on(setStepAssigneeSuccess, (state, action) => ({\n ...state,\n updateStepAssigneeInProgress: false,\n updateStepAssigneeStatus: UpdateStatus.OK,\n })),\n on(setStepAssigneeFailed, (state, action) => ({\n ...state,\n updateStepAssigneeInProgress: false,\n updateStepAssigneeStatus: UpdateStatus.ERROR,\n })),\n\n on(getDefaultTurnoversAssignees, (state, action) => ({\n ...state,\n defaultTurnoversAssigneesLoading: true,\n })),\n on(getDefaultTurnoversAssigneesSuccess, (state, action) => ({\n ...state,\n defaultTurnoversAssignees: action.defaultTurnoversAssignees,\n defaultTurnoversAssigneesLoading: false,\n })),\n on(getDefaultTurnoversAssigneesFailed, (state, action) => ({\n ...state,\n defaultTurnoversAssignees: [],\n defaultTurnoversAssigneesLoading: false,\n })),\n on(setDisplayedPropertyList, (state, action) => ({\n ...state,\n displayedPropertyList: action.displayedPropertyList,\n })),\n on(setSectionLostRevenue, (state, action) => ({\n ...state,\n sectionsLostRevenue: {\n ...state.sectionsLostRevenue,\n [action.propertyId]: action.lostRevenue,\n },\n })),\n on(clearTurnoverTimers, state => ({\n ...state,\n timers: [],\n })),\n on(turnoverTimersLoaded, (state, action) => ({\n ...state,\n timers: action.timers,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromPunchReducer from '../reducers/punch.reducer';\n\nconst selectPunchState = createFeatureSelector(fromPunchReducer.punchFeatureKey);\n\nexport const selectPunchesByTurnoverId = createSelector(selectPunchState, state => state.punchesByTurnoverId);\nexport const selectPunchesByTurnoverIdLoading = createSelector(\n selectPunchState,\n state => state.punchesByTurnoverIdLoading\n);\n\nexport const selectSelectedPunch = createSelector(selectPunchState, state => state.selectedPunch);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { TurnoverBidsState, turnoverBidsFeatureKey } from '@main-application/turnovers/reducers/turnover-bids.reducer';\n\nconst selectTurnoverBidsState = createFeatureSelector(turnoverBidsFeatureKey);\n\nexport const selectTurnoverBids = createSelector(selectTurnoverBidsState, state => state.bids);\n\nexport const selectTurnoverBidCategories = createSelector(selectTurnoverBidsState, state => state.bidCategories);\n\nexport const selectTurnoverBidAdding = createSelector(selectTurnoverBidsState, state => state.bidAdding);\n\nexport const selectTurnoverBidsLoading = createSelector(selectTurnoverBidsState, state => state.bidsLoading);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromTurnovers from '@main-application/turnovers/reducers/turnovers.reducer';\n\nexport const selectTurnoversState = createFeatureSelector(fromTurnovers.turnoversFeatureKey);\n\n/**\n * get created turnover id\n */\nexport const selectCreatedTurnover = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.createdTurnover\n);\nexport const selectCreateTurnoverLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.createTurnoverLoading\n);\n\n/**\n * get turnover data\n */\nexport const selectTurnoverData = createSelector(selectTurnoversState, turnoversState => turnoversState.turnoverData);\nexport const selectTurnoverUnitName = createSelector(selectTurnoverData, turnoverData => turnoverData?.unitName);\nexport const selectTurnoverDataId = createSelector(selectTurnoverData, turnoverData => turnoverData?.id);\nexport const selectUpdatedTurnoverData = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updatedTurnoverData\n);\nexport const selectTurnoverDataLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverDataLoading\n);\nexport const selectEmptyTurnoverData = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.emptyTurnoverData\n);\n\n/**\n * Set workflow step\n */\nexport const selectSetWorkflowStepLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.setWorkflowStepLoading\n);\nexport const selectSetWorkflowStepStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.setWorkflowStepStatus\n);\nexport const selectNextWorkflowStep = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.nextWorkflowStep\n);\n\n/**\n * get current workflow step\n */\n\nexport const selectCurrentWorkflowStep = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.currentWorkflowStep\n);\n/**\n * get current workflow step model\n */\n\nexport const selectCurrentWorkflowStepModel = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.currentWorkflowStepModel\n);\n\n/**\n * get appliance type list\n */\nexport const selectApplianceTypeList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.applianceTypeList\n);\n\n/**\n * get color type list\n */\nexport const selectColorTypeList = createSelector(selectTurnoversState, turnoversState => turnoversState.colorTypeList);\n\n/**\n * select NewApplianceNeededLoading\n */\n\nexport const selectIsNewApplianceNeededAdd = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.isNewApplianceNeededAdd\n);\n\nexport const selectAddNewApplianceNeededLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addNewApplianceNeededLoading\n);\n\n/**\n * get user list\n */\nexport const selectUserList = createSelector(selectTurnoversState, turnoversState => turnoversState.userList);\n\nexport const selectAllUserRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allUserRadioList\n);\n\nexport const selectAllUserList = createSelector(selectTurnoversState, turnoversState => turnoversState.allUserList);\n\nexport const selectListModel = createSelector(selectTurnoversState, turnoversState => turnoversState.userListModel);\n\n/**\n * get company radio list\n */\nexport const selectCompanyRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyRadioList\n);\nexport const selectCompanyNameRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyNameRadioList\n);\nexport const selectCompanyEmailRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyEmailRadioList\n);\n\n/**\n * select Added Attachment\n */\nexport const selectAddedAttachment = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addedAttachment\n);\n\nexport const selectAddedBidAttachment = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addedBidAttachment\n);\n\nexport const selectAddBidAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addBidAttachmentInProgress\n);\n\nexport const selectAddBidAttachmentStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addBidAttachmentStatus\n);\n\nexport const selectAddedTicketAttachment = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addedTicketAttachment\n);\n\nexport const selectAddTurnoverAttachmentStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addTurnoverAttachmentStatus\n);\n\nexport const selectAddTurnoverAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addTurnoverAttachmentInProgress\n);\n/**\n * select update attachment\n */\n\nexport const selectUpdateTurnoverAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateTurnoverAttachmentInProgress\n);\n\nexport const selectUpdateTurnoverAttachmentStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateTurnoverAttachmentStatus\n);\n\n/**\n * select remove attachment\n */\n\nexport const selectDeleteTurnoverAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteTurnoverAttachmentInProgress\n);\n\n/**\n * Is new bid added\n */\nexport const selectNewBidList = createSelector(selectTurnoversState, turnoversState => turnoversState.newBidList);\nexport const selectNewBidListInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.newBidListInProgress\n);\n\n/**\n * turnover ticket\n */\nexport const selectTurnoverTicketList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverTicketList\n);\n\nexport const selectTurnoverTicketListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverTicketListLoading\n);\n\nexport const selectUpdateTicketInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateTicketInProgress\n);\n\n/**\n * select newTurnoverTicket\n */\nexport const selectNewTurnoverTicket = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.newTurnoverTicket\n);\nexport const selectNewTurnoverTicketLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.newTurnoverTicketLoading\n);\n\n/**\n * select updated Turnover Ticket\n */\nexport const selectUpdatedTurnoverTicket = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.editedTicket\n);\nexport const selectSelectedTicket = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.selectedTicket\n);\nexport const selectSelectedTicketLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.selectedTicketLoading\n);\n\n/**\n * get company list\n */\nexport const selectCompanyList = createSelector(selectTurnoversState, turnoversState => turnoversState.companyList);\nexport const selectCompanyListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyListLoading\n);\n\n/**\n * get bid turnover list\n */\nexport const selectBidTurnoverList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidTurnoverList\n);\nexport const selectBidTurnoverListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidTurnoverListLoading\n);\n\n/**\n * get bid turnover list\n */\nexport const selectAllBidList = createSelector(selectTurnoversState, turnoversState => turnoversState.allBidList);\nexport const selectAllBidListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allBidListLoading\n);\n\n/**\n * get bid company list\n */\nexport const selectBidCompanyList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidCompanyList\n);\nexport const selectBidCompanyListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidCompanyListLoading\n);\n\n/**\n * get turnover attachments\n */\nexport const selectAllAttachments = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allAttachments\n);\nexport const selectAllAttachmentsLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allAttachmentsLoading\n);\n\n/**\n * get bid\n */\nexport const selectBid = createSelector(selectTurnoversState, turnoversState => turnoversState.bid);\nexport const selectBidLoading = createSelector(selectTurnoversState, turnoversState => turnoversState.bidLoading);\nexport const selectUpdatedBid = createSelector(selectTurnoversState, turnoversState => turnoversState.updatedBid);\nexport const selectUpdatedBidLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updatedBidLoading\n);\nexport const selectUpdatedBidCommentLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updatedBidCommentLoading\n);\n\nexport const selectRejectBidLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.rejectBidLoading\n);\n\n/**\n * delete bid attachment\n */\nexport const selectDeleteBidAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteBidAttachmentInProgress\n);\nexport const selectDeleteBidAttachmentStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteBidAttachmentStatus\n);\n\n/**\n * select bid attachment list\n */\nexport const selectBidAttachments = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidAttachments\n);\nexport const selectBidAttachmentsLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidAttachmentsLoading\n);\n\n/**\n * get appliance\n */\nexport const selectAppliance = createSelector(selectTurnoversState, turnoversState => turnoversState.appliance);\nexport const selectApplianceLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.applianceLoading\n);\n\n/**\n * get workflow step comment\n */\nexport const selectWorkflowStepCommentList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepCommentList\n);\nexport const selectWorkflowStepCommentListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepCommentListLoading\n);\nexport const selectWorkflowStepCommentUpdateLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepCommentUpdateLoading\n);\n\n/* get worflow assignment responsible part id */\nexport const selectWorkflowAssignmentAssigneeId = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepAssigneeId\n);\nexport const selectWorkflowAssignmentLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepAssignmentLoading\n);\n\nexport const selectReloadAppliancesNeeded = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.reloadAppliancesNeeded\n);\n\n/**\n * delete turnover\n */\n\nexport const selectDeleteTurnoverInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteTurnoverInProgress\n);\n\nexport const selectTurnoverDeleteStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverDeleteStatus\n);\n\nexport const selectStepInfo = createSelector(selectTurnoversState, turnoversState => turnoversState.stepInfo);\n\n/**\n * get ticket\n */\nexport const selectTicket = createSelector(selectTurnoversState, turnoversState => turnoversState.ticket);\nexport const selectTicketLoading = createSelector(selectTurnoversState, turnoversState => turnoversState.ticketLoading);\n\n/**\n * get ticket attachments\n */\nexport const selectTicketAttachments = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketAttachments\n);\nexport const selectTicketAttachmentsLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketAttachmentsLoading\n);\n\n/**\n * update ticket preview\n */\nexport const selectTicketUpdateInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketUpdateInProgress\n);\nexport const selectTicketUpdateInProgressStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketUpdateInProgressStatus\n);\n\nexport const selectInspectTurnoverId = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.inspectTurnoverId\n);\n\nexport const selectValidationParams = createSelector(selectTurnoversState, turnoversState => ({\n lockFields: turnoversState.validationParams.lockFields,\n nextStepAvailable: turnoversState.validationParams.nextStepAvailable && turnoversState.validationParams.saveAvailable,\n nextStepChecking: turnoversState.validationParams.nextStepChecking,\n saveAvailable: turnoversState.validationParams.saveAvailable,\n customMessage: turnoversState.validationParams.customMessage,\n}));\n\n/**\n * counters\n */\n\nexport const selectAllPropertyIds = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allPropertyIds\n);\n\nexport const selectActivePropertyIds = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.activePropertyIds\n);\n\nexport const selectIsActiveSection = propertyId =>\n createSelector(selectActivePropertyIds, activePropertyIds => activePropertyIds.includes(propertyId));\n\nexport const selectInactiveFilteredPropertyIds = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.inactiveFilteredPropertyIds\n);\n\nexport const selectIsInactiveFilteredSection = propertyId =>\n createSelector(selectInactiveFilteredPropertyIds, inactiveFilteredPropertyIds =>\n inactiveFilteredPropertyIds.includes(propertyId)\n );\n\n/**\n * update step assignee\n */\nexport const selectUpdateStepAssigneeInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateStepAssigneeInProgress\n);\n\nexport const selectUpdateStepAssigneeStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateStepAssigneeStatus\n);\n\n/**\n * default Turnovers Assignees\n */\nexport const selectDefaultTurnoversAssignees = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.defaultTurnoversAssignees\n);\n\nexport const selectDefaultTurnoversAssigneesLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.defaultTurnoversAssigneesLoading\n);\n\nexport const selectDisplayedPropertyList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.displayedPropertyList\n);\n\nexport const selectSectionsLostRevenue = createSelector(\n selectTurnoversState,\n turnoverState => turnoverState.sectionsLostRevenue\n);\n\nexport const selectTurnoverTimers = createSelector(selectTurnoversState, turnoverState => turnoverState.timers);\n","import { createAction, props } from '@ngrx/store';\n\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\nexport const loadEnumerations = createAction('[Dashboard] Load enumerations');\nexport const loadEnumerationsSuccess = createAction(\n '[Dashboard] Enumerations loaded successfully',\n props<{ enumerations: EnumerationConfig }>()\n);\nexport const loadEnumerationsFailed = createAction('[Dashboard] Enumerations loading failed');\n","import { createAction, props } from '@ngrx/store';\n\nimport { AttachmentSection } from '@shared/enums/attachment-section';\nimport { UploadedFileItem } from '@shared/interfaces/uploaded-file-item.interface';\n\nexport const loadFileUploads = createAction('[FileUpload] Load FileUploads');\n\n/**\n * upload file\n */\nexport const uploadFile = createAction(\n '[FileUpload] upload file',\n props<{ file: File; attachmentSection: AttachmentSection }>()\n);\nexport const uploadFileSuccess = createAction(\n '[FileUpload] upload file success',\n props<{ uploadedFileItem: UploadedFileItem }>()\n);\nexport const clearUploadedFile = createAction('[FileUpload] clear uploaded file');\nexport const uploadFileFail = createAction('[FileUpload] upload file fail');\n\n/**\n * delete file\n */\nexport const deleteFile = createAction('[FileUpload] delete file', props<{ fileId: number }>());\nexport const deleteFileSuccess = createAction('[FileUpload] delete file success');\nexport const deleteFileFailed = createAction('[FileUpload] delete file failed');\n","import { createAction, props } from '@ngrx/store';\n\nexport const setPreviousRoute = createAction('[App][Core] set previous route', props<{ previousRoute: string }>());\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\n\nexport const loadTenantData = createAction('[App][Core] Load tenant data');\nexport const loadUserTenantSucceeded = createAction('[App][Core] Load tenant data succeeded', props());\nexport const loadUserTenantFailed = createAction('[App][Core] Load tenant data failed');\n\nexport const loadUserData = createAction('[App][Core] Load user data');\nexport const loadUserDataSucceded = createAction('[App][Core] Load user data succeeded', props());\nexport const loadUserDataFailed = createAction('[App][Core] Load user data failed');\n\nexport const loadUserById = createAction('[App][Core] Load user by id', props<{ userId: number }>());\nexport const loadUserByIdSucceded = createAction('[App][Core] Load user by id succeded', props());\nexport const loadUserByIdFailed = createAction('[App][Core] Load user by id failed');\n\nexport const setUserGeneralRole = createAction('[App][Core] User general role update', props<{ roleName: string }>());\nexport const setAuthenticated = createAction('[App][Core] set authenticated', props<{ isAuthenticated: boolean }>());\n\nexport const loadAllUserProperties = createAction('[App][Core] Load all user properties');\nexport const loadAllUserPropertiesSucceeded = createAction(\n '[App][Core] Load all user properties succeeded',\n props<{ properties: RestPropertyModel[] }>()\n);\nexport const loadAllUserPropertiesFailed = createAction('[App][Core] Load all user properties failed');\n","import { createAction, props } from '@ngrx/store';\n\n/**\n * set window width\n */\nexport const setWindowWidth = createAction('[window-resize] set window width', props<{ windowWidth: number }>());\n","import { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { RoutePath } from '@shared/enums/route-path.enum';\n\nexport const AppRoutes = {\n HOME: `/${RoutePath.HOME}`,\n ROLES: `/${RoutePath.ROLES}`,\n ROLES_ADMIN_HOME: `/${RoutePath.ROLES}/${RoutePath.ADMIN}`,\n ROLES_ADMIN_PERFORMANCE_METRICS: `/${RoutePath.ROLES}/${RoutePath.ADMIN}/${RoutePath.PERFORMANCE_METRICS}`,\n ROLES_ASSET_HOME: `/${RoutePath.ROLES}/${RoutePath.ASSET_DASHBOARD}`,\n ROLES_ASSET_PROPERTY: `/${RoutePath.ROLES}/${RoutePath.ASSET_DASHBOARD}/${RoutePath.PROPERTY}`,\n ROLES_CONSTRUCTION_HOME: `/${RoutePath.ROLES}/${RoutePath.CONSTRUCTION_MANAGER}`,\n ROLES_PROPERTY_HOME: `/${RoutePath.ROLES}/${RoutePath.PROPERTY_DASHBOARD}`,\n ROLES_VENDOR_HOME: `/${RoutePath.ROLES}/${RoutePath.VENDOR_DASHBOARD}`,\n\n REPORTS: `/${RoutePath.REPORTS}`,\n REPORTS_RENT_ROLL: `/${RoutePath.REPORTS}/${RoutePath.RENT_ROLL}`,\n REPORTS_ROC: `/${RoutePath.REPORTS}/${RoutePath.ROC}`,\n REPORTS_BILLING: `/${RoutePath.REPORTS}/${RoutePath.BILLING}`,\n REPORTS_UNIT_MIX: `/${RoutePath.REPORTS}/${RoutePath.UNIT_MIX}`,\n REPORTS_DELINQUENCIES: `/${RoutePath.REPORTS}/${RoutePath.DELINQUENCIES}`,\n REPORTS_RENEWALS: `/${RoutePath.REPORTS}/${RoutePath.RENEWALS}`,\n\n DASHBOARD_ACTIVE_TURNOVERS: `/${RoutePath.UNIT_DASHBOARD}/${RoutePath.ACTIVE_TURNOVERS}`,\n DASHBOARD_TICKETS: `/${RoutePath.UNIT_DASHBOARD}/${RoutePath.TICKETS}`,\n DASHBOARD_PROPERTY_MGMT: `/${RoutePath.ASSET_DASHBOARD}/${RoutePath.PROPERTY}`,\n ASSET_MANAGER_HOME_DASHBOARD: `/${RoutePath.ASSET_DASHBOARD}`,\n PROPERTY_MANAGER_HOME_DASHBOARD: `/${RoutePath.PROPERTY_DASHBOARD}`,\n CONSTRUCTION_MANAGER_HOME_DASHBOARD: `/${RoutePath.CONSTRUCTION_MANAGER}`,\n ADMIN_HOME_DASHBOARD: `/${RoutePath.ADMIN_LEVEL_1}`,\n ADMIN_SUBSECTION_DASHBOARD: `/${RoutePath.ADMIN_LEVEL_2}`,\n\n INSPECTIONS: `/${RoutePath.INSPECTIONS}`,\n SETTINGS_SURVEYS: `/${RoutePath.INSPECTIONS}/${ManagementRoute.SURVEYS}`,\n SETTINGS_TEMPLATE: `/${RoutePath.INSPECTIONS}/${ManagementRoute.TEMPLATE}`,\n SETTINGS_SPACE_TEMPLATE: `/${RoutePath.INSPECTIONS}/${ManagementRoute.SPACE_TEMPLATE}`,\n\n Maintenance: `/${RoutePath.Maintenance}`,\n\n LOGIN: `/${RoutePath.LOGIN}`,\n ACCEPT_TOKEN: `/${RoutePath.ACCEPT_TOKEN}`,\n WIDGET_BOARD_RESCHEDULE: `/${RoutePath.WIDGET_BOARD_RESCHEDULE}`,\n WIDGET_BOARD_DONE: `/${RoutePath.WIDGET_BOARD_DONE}`,\n WIDGET_BOARD_COMMENT: `/${RoutePath.WIDGET_BOARD_COMMENT}`,\n ROOT: `/`,\n BOARDS: `/${RoutePath.BOARDS}`,\n BUILDIUM: `/${RoutePath.BUILDIUM}`,\n TURNOVERS: `/${RoutePath.TURNOVERS}`,\n TURNOVERS_KANBAN: `/${RoutePath.TURNOVERS}/${RoutePath.KANBAN}`,\n TURNOVERS_ACTIVE: `/${RoutePath.TURNOVERS}/${RoutePath.ACTIVE_TURNOVERS}`,\n TURNOVERS_ARCHIVED: `/${RoutePath.TURNOVERS}/${RoutePath.ARCHIVED}`,\n TURNOVERS_NOTICE: `/${RoutePath.TURNOVERS}/${RoutePath.NOTICE}`,\n TURNOVERS_MOVE_OUT_CONFIRMATION: `/${RoutePath.TURNOVERS}/${RoutePath.MOVE_OUT_CONFIRMATION}`,\n TURNOVERS_SCOPE_AND_BID_APPROVAL: `/${RoutePath.TURNOVERS}/${RoutePath.BID}`,\n TURNOVERS_MAKE_READY: `/${RoutePath.TURNOVERS}/${RoutePath.MAKE_READY}`,\n TURNOVERS_RENOVATION: `/${RoutePath.TURNOVERS}/${RoutePath.RENO}`,\n TURNOVERS_PUNCH: `/${RoutePath.TURNOVERS}/${RoutePath.PUNCH}`,\n TURNOVERS_MANAGEMENT_APPROVAL: `/${RoutePath.TURNOVERS}/${RoutePath.APPROVAL}`,\n TURNOVERS_LEASE_READY: `/${RoutePath.TURNOVERS}/${RoutePath.MARKETING}`,\n TURNOVERS_LEASE_UP: `/${RoutePath.TURNOVERS}/${RoutePath.LEASE_UP}`,\n TURNOVERS_MOVE_IN: `/${RoutePath.TURNOVERS}/${RoutePath.MOVE_IN}`,\n TURNOVERS_ARCHIVE: `/${RoutePath.TURNOVERS}/${RoutePath.ARCHIVE}`,\n TURNOVERS_BULK_BIDS: `/${RoutePath.TURNOVERS}/${RoutePath.BULK_BIDS}`,\n TURNOVERS_DETAIL: `/${RoutePath.TURNOVERS}/:id`,\n JOBS_AVAILABLE_AND_BIDS_SENT: `/${RoutePath.JOBS_AVAILABLE_AND_BIDS_SENT}`,\n DELINQUENCIES: `/${RoutePath.DELINQUENCIES}`,\n DELINQUENCIES_DETAIL: `/${RoutePath.DELINQUENCIES}/:id`,\n RENEWALS: `/${RoutePath.RENEWALS}`,\n MOVE_OUT: `/${RoutePath.MOVE_OUT}`,\n MOVE_OUT_ASSET_MANAGER: `/${RoutePath.MOVE_OUT}/${RoutePath.ASSET_DASHBOARD}`,\n MOVE_OUT_PROPERTY_MANAGER: `/${RoutePath.MOVE_OUT}/${RoutePath.PROPERTY_DASHBOARD}`,\n MOVE_OUT_ASSET_MANAGER_ARCHIVED: `/${RoutePath.MOVE_OUT}/${RoutePath.ASSET_DASHBOARD}/${RoutePath.ARCHIVED}`,\n MOVE_OUT_PROPERTY_MANAGER_ARCHIVED: `/${RoutePath.MOVE_OUT}/${RoutePath.PROPERTY_DASHBOARD}/${RoutePath.ARCHIVED}`,\n RENEWALS_DETAIL: `/${RoutePath.RENEWALS}/:id`,\n SETTINGS: `/${ManagementRoute.SETTINGS}`,\n SETTINGS_USERS: `/${ManagementRoute.SETTINGS}/${ManagementRoute.USERS}`,\n SETTINGS_ROLES: `/${ManagementRoute.SETTINGS}/${ManagementRoute.ROLES}`,\n SETTINGS_ROLES_NEW: `/${ManagementRoute.SETTINGS}/${ManagementRoute.ROLES}/${ManagementRoute.NEW}`,\n SETTINGS_ROLES_EDIT: `/${ManagementRoute.SETTINGS}/${ManagementRoute.ROLES}/${ManagementRoute.EDIT}`,\n SETTINGS_RENEWAL_STRATEGY: `/${ManagementRoute.SETTINGS}/${ManagementRoute.RENEWAL_STRATEGY}`,\n SETTINGS_KPI: `/${ManagementRoute.SETTINGS}/${ManagementRoute.KPI}`,\n SETTINGS_PORTFOLIO: `/${ManagementRoute.SETTINGS}/${ManagementRoute.PORTFOLIO}`,\n SETTINGS_VENDOR: `/${ManagementRoute.SETTINGS}/${ManagementRoute.VENDOR}`,\n SETTINGS_SYSTEM: `/${ManagementRoute.SETTINGS}/${ManagementRoute.SYSTEM}`,\n SETTINGS_TURNOVER_CONFIGURATION: `/${ManagementRoute.SETTINGS}/${ManagementRoute.TURNOVER_CONFIGURATION}`,\n TICKETS: `/${RoutePath.TICKETS}`,\n NO_PERMISSION: `/${RoutePath.NO_PERMISSION}`,\n};\n","export const NoValue = '—';\n","import { PriorityType } from '@shared/enums/priority-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const PriorityTypeListConst: IRadioButtonOption[] = [\n {\n label: 'low',\n value: PriorityType.Low,\n },\n {\n label: 'med',\n value: PriorityType.Medium,\n },\n {\n label: 'high',\n value: PriorityType.High,\n },\n];\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const WorkflowStepListConst: IRadioButtonOption[] = [\n {\n value: WorkflowStepEnumType.Notice,\n label: 'NOTICE',\n },\n {\n value: WorkflowStepEnumType.MoveOut,\n label: 'MOVE OUT',\n },\n {\n value: WorkflowStepEnumType.Bid,\n label: 'BID',\n },\n {\n value: WorkflowStepEnumType.MakeReady,\n label: 'MAKE READY',\n },\n {\n value: WorkflowStepEnumType.Reno,\n label: 'RENO',\n },\n {\n value: WorkflowStepEnumType.Punch,\n label: 'PUNCH',\n },\n {\n value: WorkflowStepEnumType.Approval,\n label: 'APPROVAL',\n },\n {\n value: WorkflowStepEnumType.Marketing,\n label: 'MARKETING',\n },\n {\n value: WorkflowStepEnumType.LeaseUp,\n label: 'LEASE UP',\n },\n {\n value: WorkflowStepEnumType.MoveIn,\n label: 'MOVE IN',\n },\n {\n value: WorkflowStepEnumType.Archive,\n label: 'ARCHIVE',\n },\n];\n\nexport const WorkflowStepListActive: IRadioButtonOption[] = WorkflowStepListConst.filter(\n e => ![WorkflowStepEnumType.Bid, WorkflowStepEnumType.Marketing, WorkflowStepEnumType.Archive].includes(e.value)\n);\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n OnDestroy,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ContentEditableDirective),\n multi: true,\n },\n ],\n})\nexport class ContentEditableDirective implements ControlValueAccessor, AfterViewInit, OnDestroy {\n private onTouched = () => {};\n\n private onChange = (_value: string) => {};\n\n private observer: MutationObserver;\n\n constructor(\n @Inject(ElementRef) private readonly elementRef: ElementRef,\n @Inject(Renderer2) private readonly renderer: Renderer2\n ) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'contenteditable', 'true');\n }\n\n ngAfterViewInit() {\n this.observer = new MutationObserver(() => {\n this.onChange(this.elementRef.nativeElement.innerHTML);\n });\n\n this.observer.observe(this.elementRef.nativeElement, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n\n ngOnDestroy() {\n this.observer.disconnect();\n }\n\n @HostListener('input')\n onInput() {\n this.observer.disconnect();\n this.onChange(this.elementRef.nativeElement.innerHTML);\n }\n\n @HostListener('blur')\n onBlur() {\n this.onTouched();\n }\n\n writeValue(value: string) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', value || '');\n }\n\n registerOnChange(onChange: (value: string) => void) {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: () => void) {\n this.onTouched = onTouched;\n }\n\n setDisabledState(disabled: boolean): void {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'contenteditable', String(!disabled));\n }\n}\n","
    \n \n
    {{ text }}
    \n
    \n \n
    \n","import { ChangeDetectionStrategy, Component, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'app-custom-tooltip',\n templateUrl: './custom-tooltip.component.html',\n styleUrls: ['./custom-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomTooltipComponent implements OnInit {\n @Input() text: string;\n @Input() contentTemplate: TemplateRef;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import { Overlay, OverlayPositionBuilder, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n} from '@angular/core';\n\nimport { CustomTooltipComponent } from '@ui-components/components/custom-tooltip/custom-tooltip.component';\n\n@Directive({\n selector: '[appCustomTooltip]',\n})\nexport class CustomTooltipDirective implements OnInit, OnDestroy {\n @Input('customToolTip') text: string;\n @Input() contentTemplate: TemplateRef;\n\n @Input() set showToolTip(showToolTip: boolean) {\n if (!showToolTip) {\n return;\n }\n\n const positionStrategy = this.overlayPositionBuilder.flexibleConnectedTo(this.elementRef).withPositions([\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 5,\n },\n ]);\n\n this.overlayRef = this.overlay.create({ positionStrategy });\n }\n\n private overlayRef: OverlayRef;\n\n constructor(\n private overlay: Overlay,\n private overlayPositionBuilder: OverlayPositionBuilder,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {}\n\n @HostListener('mouseenter')\n show() {\n if (this.overlayRef && !this.overlayRef.hasAttached()) {\n const tooltipRef: ComponentRef = this.overlayRef.attach(\n new ComponentPortal(CustomTooltipComponent)\n );\n tooltipRef.instance.text = this.text;\n tooltipRef.instance.contentTemplate = this.contentTemplate;\n }\n }\n\n @HostListener('mouseleave')\n hide() {\n this.closeToolTip();\n }\n\n ngOnDestroy() {\n this.closeToolTip();\n }\n\n private closeToolTip() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n }\n}\n","import { Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\n\n@Directive({\n selector: '[appDropZone]',\n})\nexport class DropZoneDirective {\n // The directive emits a `fileDrop` event\n // with the list of files dropped on the element\n // as an JS array of `File` objects.\n @Output('appDropZone') fileDrop = new EventEmitter>();\n\n // Disable dropping on the body of the document.\n // This prevents the browser from loading the dropped files\n // using it's default behaviour if the user misses the drop zone.\n // Set this input to false if you want the browser default behaviour.\n @Input() preventBodyDrop = true;\n\n // The `drop-zone-active` class is applied to the host\n // element when a drag is currently over the target.\n @HostBinding('class.drop-zone-active')\n active = false;\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.active = false;\n\n const { dataTransfer } = event;\n\n if (dataTransfer.items) {\n const files = [];\n for (let i = 0; i < dataTransfer.items.length; i++) {\n // If dropped items aren't files, reject them\n if (dataTransfer.items[i].kind === 'file') {\n files.push(dataTransfer.items[i].getAsFile());\n }\n }\n dataTransfer.items.clear();\n this.fileDrop.emit(files);\n } else {\n const files = dataTransfer.files;\n dataTransfer.clearData();\n this.fileDrop.emit(Array.from(files));\n }\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.stopPropagation();\n event.preventDefault();\n this.active = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event: DragEvent) {\n this.active = false;\n }\n\n @HostListener('body:dragover', ['$event'])\n onBodyDragOver(event: DragEvent) {\n if (this.preventBodyDrop) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n @HostListener('body:drop', ['$event'])\n onBodyDrop(event: DragEvent) {\n if (this.preventBodyDrop) {\n event.preventDefault();\n }\n }\n}\n","export enum Animation {\n WHITE_LOGO = 'WHITE_LOGO',\n BLACK_LOGO = 'BLACK_LOGO',\n}\n","export enum AttachmentComponentType {\n File,\n Link,\n}\n","export enum PortfolioAttachmentType {\n None = 'None',\n PrimaryPhoto = 'PrimaryPhoto',\n Photo = 'Photo',\n Avatar = 'Avatar',\n ArticlesOfIncorporation = 'ArticlesOfIncorporation',\n Prospectus = 'Prospectus',\n Brochure = 'Brochure',\n}\n\nexport enum PropertyAttachmentType {\n None = 'None',\n PrimaryPhoto = 'PrimaryPhoto',\n Photo = 'Photo',\n Avatar = 'Avatar',\n RentalApplication = 'RentalApplication',\n LeaseAgreement = 'LeaseAgreement',\n}\n\nexport enum UnitAttachmentType {\n None,\n PrimaryPhoto,\n Photo,\n CurrentLease,\n FloorPlan,\n}\n\nexport enum TurnoverAttachmentType {\n None,\n Summary,\n ScopeOfWork,\n Photo,\n Other,\n InspectionReport,\n}\n\nexport enum ApplianceAttachmentType {\n None = 'None',\n Order = 'Order',\n Warranty = 'Warranty',\n Manual = 'Manual',\n InstallationGuide = 'InstallationGuide',\n}\n\nexport enum BidAttachmentType {\n None,\n FilledScopeOfWork,\n Photo,\n}\n\nexport enum TicketAttachmentType {\n None,\n Attachment,\n}\n","export enum AuditableEntityType {\n None,\n Delinquency,\n Renewal,\n WorkflowStep,\n TurnoverData,\n}\n","export enum BreadcrumbTheme {\n LIGHT_GRAY = 'LIGHT_GRAY',\n GRAY = 'GRAY',\n GREEN = 'GREEN',\n KANBAN_GRAY1 = 'KANBAN_GRAY1',\n KANBAN_GRAY2 = 'KANBAN_GRAY2',\n KANBAN_GRAY3 = 'KANBAN_GRAY3',\n KANBAN_GRAY4 = 'KANBAN_GRAY4',\n KANBAN_GREEN1 = 'KANBAN_GREEN1',\n KANBAN_GREEN2 = 'KANBAN_GREEN2',\n KANBAN_GREEN3 = 'KANBAN_GREEN3',\n KANBAN_GREEN4 = 'KANBAN_GREEN4',\n KANBAN_GREEN5 = 'KANBAN_GREEN5',\n KANBAN_GREEN6 = 'KANBAN_GREEN6',\n KANBAN_GREEN7 = 'KANBAN_GREEN7',\n KANBAN_GREEN8 = 'KANBAN_GREEN8',\n KANBAN_GREEN9 = 'KANBAN_GREEN9',\n KANBAN_SELECTED = 'KANBAN_SELECTED',\n}\n","export enum ButtonType {\n DEFAULT = 'DEFAULT',\n STROKED = 'STROKED',\n RAISED = 'RAISED',\n}\n","export enum EColorPalette {\n cGray = '#484848',\n cGray2 = '#DADADA',\n cGray3 = '#8A8A8A',\n cGray4 = '#212121',\n cGray5 = '#B9B8B8',\n cGray6 = '#FAFAFA',\n cGray7 = '#767575',\n cGray8 = '#EEEEEE',\n cBlack = '#000',\n cRed = '#FF6C6C',\n cRed2 = '#E93A4F',\n cGreen = '#4EB08D',\n cGreen2 = '#9EBD59',\n cGreen3 = '#108060',\n cGreen4 = '#005336',\n cGreen5 = '#0f593f',\n cGreen6 = '#0b6b50',\n cGreen7 = '#129872',\n cGreen8 = '#49a986',\n cGreen9 = '#dcefe8',\n cGreen10 = '#4EB08D',\n cYellow = '#FFC700',\n cYellow2 = '#FFCD1B',\n cYellow3 = '#FFBA69',\n cBlue = '#3058C2',\n cBlue2 = '#305D93',\n cViolet = '#6969EE',\n cOrange = '#FF8A00',\n cPurple = '#9055C3',\n cPink = '#FF217E',\n cPink2 = '#C2B6FF',\n cWhite = '#FFFFFF',\n}\n","export enum CompareOperator {\n EQUAL,\n MORE,\n LESS,\n MORE_EQUAL,\n LESS_EQUAL,\n}\n","export enum DashboardMode {\n SUPER_USER = 'SUPER_USER',\n PROPERTY_MANAGER = 'PROPERTY_MANAGER',\n ASSET_MANAGER = 'ASSET_MANAGER',\n CONSTRUCTION_MANAGER = 'CONSTRUCTION_MANAGER',\n ADMINISTRATOR_LEVEL_ONE = 'ADMINISTRATOR_LEVEL_ONE',\n ADMINISTRATOR_LEVEL_TWO = 'ADMINISTRATOR_LEVEL_TWO',\n}\n","export enum DashboardViewType {\n NONE = 0,\n PROPERTY_VIEW = 1,\n PORTFOLIO_WIDE_VIEW = 2,\n PROPERTY_WITH_GROUPING_VIEW = 3,\n}\n","export enum DelinquencyResultType {\n None,\n DelayedPayment,\n Eviction,\n PaymentPlan,\n PaidInFull,\n Assistance,\n MovedOut,\n SmallBalance,\n PendingCredit,\n NTV,\n}\n","export enum EDropdownTab {\n PREDEFINED,\n OWN,\n}\n","export enum EnumerationItemFields {\n enumerationValue = 'enumerationValue',\n enumerationGroup = 'enumerationGroup',\n simpleText = 'simpleText',\n displayText = 'displayText',\n fullDescription = 'fullDescription',\n fullyqualifiedUrn = 'fullyqualifiedUrn',\n}\n","export enum FieldType {\n STRING,\n DATE,\n CURRENCY,\n BOOLEAN,\n NUMBER,\n ASSISTANCE_TYPE,\n DELINQUENCY_RESULT_TYPE,\n RENEWAL_RESULT_TYPE,\n MOVE_OUT_TYPE,\n UNIT_CONDITION_TYPE,\n FINISH,\n TURNOVER_PRIORITY_TYPE,\n}\n","export enum EIcon {\n ANGLE_DOWN = 'angleDown',\n ANGLE_UP = 'angleUp',\n ANGLE_LEFT = 'angleLeft',\n ANGLE_RIGHT = 'angleRight',\n WARNING = 'warning',\n WARNING2 = 'warning2',\n HOME_HEART = 'homeHeart',\n ARROW_DOWN = 'arrowDown',\n ARROW_UP = 'arrowUp',\n ARROW_LEFT = 'arrowLeft',\n WAITING = 'waiting',\n FILE_PLUS = 'filePlus',\n HOME = 'home',\n SAD = 'sad',\n EXPIRATIONS = 'expirations',\n SIGN_OUT = 'signOut',\n FORWARD = 'forward',\n GREEN_FLAG = 'greenFlag',\n RED_FLAG = 'redFlag',\n YELLOW_FLAG = 'yellowFlag',\n REPEAT = 'repeat',\n DOLLAR = 'dollar',\n DONE = 'done',\n DONE_WB = 'doneWB',\n ERROR = 'error',\n QUESTION = 'question',\n SEARCH = 'search',\n TIME_SCHEDULE = 'timeSchedule',\n THUNDER_CIRCLE = 'thunderCircle',\n SHIELD_USER = 'shieldUser',\n PLUS = 'plus',\n USER = 'user',\n BOARD = 'board',\n DASHBOARD = 'dashboard',\n DASHBOARD2 = 'dashboard2',\n DASHBOARD3 = 'dashboard3',\n DASHBOARD4 = 'dashboard4',\n USER_GROUP = 'userGroup',\n CHAIR = 'chair',\n LIBRARY = 'library',\n VISIBLE = 'visible',\n FILE_DONE = 'fileDone',\n TIMER = 'timer',\n TOOLS = 'tools',\n Maintenance = 'maintenance-tools',\n ARCHIVE = 'archive',\n BINOCULAR = 'binocular',\n ARROW_FROM_LEFT = 'arrowFromLeft',\n ARROW_FROM_RIGHT = 'arrowFromRight',\n EDIT = 'edit',\n CLOSE = 'close',\n RADIO_SELECTED = 'radioSelected',\n RADIO_DEFAULT = 'radioDefault',\n BUILDING = 'building',\n IPHONE = 'iphone',\n MAIL = 'mail',\n MAIL2 = 'mail2',\n IMPORT = 'import',\n EXPORT = 'export',\n NOTIFICATION = 'notification',\n CHECK = 'check',\n HYPERLINK = 'hyperlink',\n ARROW_TO_BOTTOM = 'arrowToBottom',\n COMMENT = 'comment',\n COMMENT2 = 'comment2',\n CHECKBOX_SELECTED = 'checkboxSelected',\n CHECKBOX_DEFAULT = 'checkboxDefault',\n CROSS = 'cross',\n SAVE = 'save',\n TICK = 'tick',\n TICKET = 'ticket',\n TICKET2 = 'ticket2',\n MOVE_OUT = 'moveOut',\n HIDDEN = 'hidden',\n EXPAND_ARROWS = 'expandArrows',\n CHART_LINE = 'chartLine',\n NOTIFICATIONS = 'notifications',\n PENCIL = 'pencil',\n SETTINGS = 'settings',\n SETTINGS2 = 'settings2',\n TRASH = 'trash',\n EXPAND = 'expand',\n COLLAPSE = 'collapse',\n BLOCKS = 'blocks',\n MENU = 'menu',\n BULB = 'bulb',\n SUPPORT = 'support',\n BUG = 'bug',\n DOLLAR_CIRCLE = 'dollar_circle',\n LOGO = 'logo',\n EXCHANGE = 'exchange',\n SENDING = 'sending',\n SLEEP = 'sleep',\n REST = 'rest',\n HAMMER = 'hammer',\n SNEAKERS = 'sneakers',\n CLIPBOARD = 'clipboard',\n BULLET_LIST = 'bulletList',\n NOTIFICATIONS_BIT = 'notifications_bit',\n PORTFOLIOS = 'portfolios',\n HALF_STAR = 'halfStar',\n DOWNLOAD = 'download',\n KEY = 'iconKey',\n TIME_SCHEDULE2 = 'iconTimeSchedule',\n REPEAT_ONE = 'iconRepeatOne',\n ALARM_CLOCK = 'iconAlarmClock',\n ESTIMATED_OCCUPANCY = 'iconEstimatedOccupancy',\n HOME_HEART2 = 'iconHomeHeart',\n REPEAT2 = 'iconRepeat',\n CLIPBOARD2 = 'iconClipboard',\n BID = 'iconBid',\n MAKE_READY = 'iconMakeReady',\n RENO = 'iconReno', //Brush\n DESIGN_PIN = 'designPin',\n MOVE_IN = 'iconMoveIn',\n NEW_TRASH = 'new_trash',\n FINGER = 'finger',\n WHITE_PLUS = 'white_plus',\n GREEN_PLUS = 'greenPlus',\n VACANCY_LOSS = 'vacancyLoss',\n UNIT = 'unit',\n PROPERTY = 'property',\n KEY2 = 'key',\n JOIN_MODE = 'iconJoinMode',\n SPLIT_MODE = 'iconSplitMode',\n SENTIMENT_SATISFIED = 'good',\n SENTIMENT_NEUTRAL = 'fair',\n SENTIMENT_DISSATISFIED = 'poor',\n CLIPBOARD_LIST = 'Clipboard_list',\n CHAT = 'Chat',\n FLAG = 'Flag',\n SKIPPED = 'skipped',\n CHECK_NO = 'Check_no',\n CHECK_YES = 'Check_yes',\n SHARE = 'share',\n FILTER = 'iconFilter',\n ICON_CALENDAR = 'iconCalendar',\n ICON_HOME = 'iconHome',\n ICON_DOLLAR = 'iconDollar',\n ICON_JOIN = 'iconJoin',\n ICON_SPLIT = 'iconSplit',\n ICON_SEARCH = 'iconSearch',\n BB_TRASH = 'bb-trash',\n EMOJI = 'emojiDefault',\n EMOJI_HOVER = 'emojiHover',\n MOVE_OUT_POINT = 'moveOutPoint',\n MOVE_IN_POINT = 'moveInPoint',\n DELAY_ICON = 'delayIcon',\n APPROVAL_BOARD = 'approvalBoard',\n MOVE_IN_BOARD = 'moveInBoard',\n MOVE_OUT_BOARD = 'moveOutBoard',\n TURBO = 'turbo',\n RESEND_EMAIL = 'resendEmail',\n ICON_UPLOAD = 'iconUpload',\n ICON_FILE_UPLOADING = 'iconFileUploading',\n ICON_FILE_UPLOADED = 'iconFileUploaded',\n}\n","export enum KpiType {\n Inventory,\n Time = 1,\n All = 2,\n}\n","export enum KpiWindowType {\n OpenTurns = 1,\n Days30 = 30,\n Days60 = 60,\n Days90 = 90,\n Months6 = 6,\n Months12 = 12,\n}\n","export enum LoaderType {\n List = 'List',\n Board = 'Board',\n PieChart = 'PieChart',\n Kanban = 'Kanban',\n Comment_List = 'Comment_List',\n Details_Single = 'Details_Single',\n Recipients_Section = 'Recipients_Section',\n System_Config = 'System_Config',\n}\n","export enum LocalStorageDataEnum {\n AVATAR_USER_CONFIG_LIST = 'avatar-user-config-list',\n BOARD_BUILDER = 'board-builder-configuration',\n KANBAN_ACTIVE_SECTIONS = 'kanban-active-sections',\n SETTINGS_TURNOVER_ELAPSED_DAYS_TOGGLE = 'settings-turnover-elapsed-days-toggle',\n SETTINGS_TURNOVER_STEP_ASSIGNEES_TOGGLE = 'settings-turnover-step-assignees-toggle',\n SETTINGS_CUSTOM_FIELDS_TOGGLE = 'settings-custom-fields-toggle',\n CACHE_KEYS = 'cache-keys-{0}',\n //INSPECTION\n INSPECTION_LIST_SORT_ACTIVE = 'inspection-list-sort-active',\n INSPECTION_LIST_SORT_DIRECTION = 'inspection-list-sort-direction',\n INSPECTION_LIST_MODE = 'inspection-list-mode',\n INSPECTION_LIST_FILTER = 'inspection-list-filter',\n //MAINTENANCE\n MAINTENANCE_LIST_FILTER = 'maintenance-list-filter',\n MAINTENANCE_LIST_SORT_ACTIVE = 'maintenance-list-sort-active',\n MAINTENANCE_LIST_SORT_DIRECTION = 'maintenance-list-sort-direction',\n}\n","export enum MainPageActions {\n ACCOUNT = 'ACCOUNT',\n PASSWORD = 'PASSWORD',\n NOTIFICATIONS = 'NOTIFICATIONS',\n LOGOUT = 'LOGOUT',\n LOGIN = 'LOGIN',\n HOME_PAGE = 'HOME_PAGE',\n NEW_TURNOVER = 'NEW_TURNOVER',\n}\n","export enum ManagementRoute {\n SETTINGS = 'settings',\n SURVEYS = 'surveys',\n USERS = 'users',\n ROLES = 'roles-management',\n NEW = 'new',\n EDIT = 'edit',\n CONTRACTORS = 'contractors',\n PROPERTY_MANAGERS = 'property-managers',\n RENEWAL_STRATEGY = 'renewal-strategy',\n APPLIANCES = 'appliances',\n KPI = 'kpi',\n PORTFOLIO = 'portfolio',\n VENDOR = 'vendor',\n SYSTEM = 'system',\n TURNOVER_CONFIGURATION = 'turnover-configuration',\n TEMPLATE = 'template',\n SPACE_TEMPLATE = 'space-template',\n}\n","export enum NotificationCategory {\n Turnover,\n TurnoverComment,\n Bid,\n BidAccepted,\n BidRejected,\n BidComment,\n Ticket,\n BidSentBack,\n TurnStepSchedule = 9,\n}\n","export enum PermissionLevelType {\n None = 'None',\n AllPermissions = 'AllPermissions',\n Inspections_SharedLibrary_List = 'Inspections_SharedLibrary_List',\n Inspections_SharedLibrary_Edit = 'Inspections_SharedLibrary_Edit',\n Inspections_List = 'Inspections_List',\n InspectionTemplates_List = 'InspectionTemplates_List',\n InspectionTemplates_Edit = 'InspectionTemplates_Edit',\n PropertyManager_Dashboard_Read = 'PropertyManager_Dashboard_Read',\n PropertyManager_PortfolioWideView = 'PropertyManager_PortfolioWideView',\n PropertyManager_UnitList_Read = 'PropertyManager_UnitList_Read',\n PropertyManager_UnitMix_Read = 'PropertyManager_UnitMix_Read',\n PropertyManager_ActiveTurnovers_Read = 'PropertyManager_ActiveTurnovers_Read',\n PropertyManager_Delinquencies_Read = 'PropertyManager_Delinquencies_Read',\n PropertyManager_Renewals_Read = 'PropertyManager_Renewals_Read',\n AssetManager_PropertyDashboard_Read = 'AssetManager_PropertyDashboard_Read',\n ConstructionManager_Dashboard_Read = 'ConstructionManager_Dashboard_Read',\n Administrator_Dashboard_Read = 'Administrator_Dashboard_Read',\n Turnovers_Kanban_Read = 'Turnovers_Kanban_Read',\n Turnovers_Archived_Read = 'Turnovers_Archived_Read',\n Delinquencies_Read = 'Delinquencies_Read',\n Renewals_Read = 'Renewals_Read',\n Management_Users = 'Management_Users',\n Management_Roles = 'Management_Roles',\n Management_Contractors_Read = 'Management_Contractors_Read',\n Management_PropertyManagers_Read = 'Management_PropertyManagers_Read',\n Management_ResponsibleParties_Read = 'Management_ResponsibleParties_Read',\n Management_UnitTargetRents_Read = 'Management_UnitTargetRents_Read',\n Management_Applicances_Read = 'Management_Applicances_Read',\n Management_KPI_Read = 'Management_KPI_Read',\n Management_Portfolio_Read = 'Management_Portfolio_Read',\n PropertyManager_UnitList_Edit = 'PropertyManager_UnitList_Edit',\n PropertyManager_UnitMix_Edit = 'PropertyManager_UnitMix_Edit',\n PropertyManager_ActiveTurnovers_Edit = 'PropertyManager_ActiveTurnovers_Edit',\n PropertyManager_Delinquencies_Edit = 'PropertyManager_Delinquencies_Edit',\n PropertyManager_Renewals_Edit = 'PropertyManager_Renewals_Edit',\n AssetManager_PropertyDashboard_Edit = 'AssetManager_PropertyDashboard_Edit',\n ConstructionManager_Dashboard_Edit = 'ConstructionManager_Dashboard_Edit',\n Administrator_Dashboard_Edit = 'Administrator_Dashboard_Edit',\n Turnovers_Kanban_Edit = 'Turnovers_Kanban_Edit',\n Turnovers_Archived_Edit = 'Turnovers_Archived_Edit',\n Delinquencies_Edit = 'Delinquencies_Edit',\n Renewals_Edit = 'Renewals_Edit',\n Management_Contractors_Edit = 'Management_Contractors_Edit',\n Management_PropertyManagers_Edit = 'Management_PropertyManagers_Edit',\n Management_ResponsibleParties_Edit = 'Management_ResponsibleParties_Edit',\n Management_UnitTargetRents_Edit = 'Management_UnitTargetRents_Edit',\n Management_Applicances_Edit = 'Management_Applicances_Edit',\n Management_KPI_Edit = 'Management_KPI_Edit',\n Management_Portfolio_Edit = 'Management_Portfolio_Edit',\n Companies_Read = 'Companies_Read',\n Companies_Edit = 'Companies_Edit',\n Tickets_Read = 'Tickets_Read',\n Tickets_Edit = 'Tickets_Edit',\n Turnovers_ReverseFlow = 'Turnovers_ReverseFlow',\n Turnovers_Delete = 'Turnovers_Delete',\n Tickets_EditAll = 'Tickets_EditAll',\n Management_TurnoverConfiguration_Read = 'Management_TurnoverConfiguration_Read',\n Management_TurnoverConfiguration_Edit = 'Management_TurnoverConfiguration_Edit',\n BulkScope = 'Bulk_Scope',\n Board_Use = 'Board_Use',\n Board_View = 'Board_View',\n Board_Edit = 'Board_Edit',\n Chat_Hooks = 'Chat_Hooks',\n Bids_View = 'Bids_View',\n Bids_Use = 'Bids_Use',\n Bids_Approval = 'Bids_Approval',\n}\n","export enum PriorityType {\n None,\n Low,\n Medium,\n High,\n}\n","export enum RouteData {\n BREADCRUMB = 'breadcrumb',\n BREADCRUMB_ICON = 'breadcrumbIcon',\n BACK_TO_PARENT_BUTTON = 'backToParentButton',\n DASHBOARD_VIEW_TYPE = 'dashboardViewType',\n SOURCE_VIEW = 'sourceView',\n APPLIANCE_ID = 'applianceId',\n DASHBOARD_SOURCE = 'dashboardSource',\n PROPERTY_ID = 'propertyId',\n PORTFOLIO_ID = 'portfolioId',\n BULK_SECTION_ID = 'bulkSectionId',\n TICKET_ID = 'ticketId',\n COMMENT_ID = 'commentId',\n KANBAN_SECTION = 'kanban-section',\n TURNOVER_OVERVIEW_STATE = 'turnover-overview-state',\n WORKFLOW_STEP = 'workflow-step',\n}\n","export enum RoutePath {\n WIDGET_BOARD_RESCHEDULE = 'bb2f/reschedule',\n WIDGET_BOARD_DONE = 'bb2f/done',\n WIDGET_BOARD_COMMENT = 'bb2f/comment',\n WIDGET_BID_REJECT = 'bb2f/RejectBid', //server use apper case for generated url links, so we should use same here\n WIDGET_BID_ACCEPT = 'bb2f/AcceptBid', //ToDo: make router case insensitive for using normal lowacse links\n WIDGET_BID_APPROVE = 'bb2f/ApproveBid',\n WIDGET_BID_DENY = 'bb2f/DenyBid',\n WIDGET_BID_COMMENT = 'bb2f/CommentBid',\n ADMIN = 'admin',\n PERFORMANCE_METRICS = 'performance-metrics',\n ADMIN_LEVEL_1 = 'administrator-first-dashboard',\n ADMIN_LEVEL_2 = 'administrator-second-dashboard',\n CONSTRUCTION_MANAGER = 'construction-manager-dashboard',\n PROPERTY_DASHBOARD = 'property-dashboard',\n PROPERTY = 'property',\n UNIT_DASHBOARD = 'unit-dashboard',\n ASSET_DASHBOARD = 'asset-dashboard',\n HOME = 'home',\n ROLES = 'roles',\n LOGIN = 'login',\n VENDOR_DASHBOARD = 'vendor-dashboard',\n ACCEPT_TOKEN = 'accept-token',\n BUILDIUM = 'buildium',\n DELINQUENCIES = 'delinquencies',\n MOVE_OUT = 'move-out',\n MOVE_OUT_PORTFOLIO = 'move-out-portfolio',\n MOVE_OUT_PROPERTY = 'move-out-property',\n // TODO temporary fix - TO BE REMOVED and use full paths instead to navigate\n RENEWALS_LIST = 'renewals-list',\n DELINQUENCY_LIST = 'delinquency-list',\n /* END TODO */\n UNIT_LIST = 'unit-list',\n NO_PERMISSION = 'no-permission',\n //boards - block\n BOARDS = 'boards',\n //Turnovers - block\n TURNOVERS = 'turnovers',\n KANBAN = 'kanban',\n ACTIVE_TURNOVERS = 'active-turnovers',\n ARCHIVED = 'archived',\n NOTICE = 'notice',\n MOVE_OUT_CONFIRMATION = 'move-out',\n BID = 'bid',\n MAKE_READY = 'make-ready',\n RENO = 'reno',\n PUNCH = 'punch',\n APPROVAL = 'approval',\n MARKETING = 'marketing',\n LEASE_UP = 'lease-up',\n MOVE_IN = 'move-in',\n ARCHIVE = 'archive',\n BULK_BIDS = 'bulk-bids',\n //Reports - block\n REPORTS = 'reports',\n RENT_ROLL = 'rent-roll',\n ROC = 'roc',\n BILLING = 'billing',\n UNIT_MIX = 'unit-mix',\n DELINQUENCY = 'delinquency',\n RENEWALS = 'renewals',\n //Reports - end\n BID_DETAIL = 'bid-detail',\n APPLIANCE_DETAIL = 'appliance-detail',\n JOBS_AVAILABLE_AND_BIDS_SENT = 'jobs-available-and-bids-sent',\n BULK_BIDS_EDIT = 'bulk-bids-edit',\n EDIT = 'edit',\n UNIT_DETAILS = 'unitDetails',\n TICKETS = 'tickets',\n DASHBOARD_TICKETS = 'dashboardTickets',\n DETAILS = 'details',\n HISTORY = 'history',\n INSPECTIONS = 'inspections',\n Maintenance = 'maintenance',\n}\n","export enum ESelectionDateMode {\n OWN = 'OWN',\n TODAY = 'TODAY',\n WEEK = 'WEEK',\n MONTH = 'MONTH',\n ALL = 'ALL',\n SINGLE = 'SINGLE',\n}\n","export enum ESelectionRangeMode {\n OWN = 'OWN',\n PREDEFINED = 'PREDEFINED',\n}\n","export enum TicketStatusType {\n None = 0,\n NotDone = 1,\n Done = 2,\n}\n","export enum TicketType {\n Ticket = 1,\n Punch = 2,\n}\n","export enum TurnoverAuditMode {\n ELAPSED_DAYS = 'ELAPSED_DAYS',\n LOST_REVENUE = 'LOST_REVENUE',\n}\n","export enum UpdateStatus {\n IN_PROGRESS = 'IN_PROGRESS',\n UPDATE = 'UPDATE',\n UPDATED = 'UPDATED',\n OK = 'OK',\n ERROR = 'ERROR',\n DELETED = 'DELETED',\n}\n","export enum UserType {\n None,\n Employee,\n Contractor,\n}\n","export enum WorkflowPhaseType {\n None,\n NotReady,\n Ready,\n}\n","export enum WorkflowStepEnumType {\n None = 0,\n Notice = 50,\n MoveOut = 100,\n Bid = 200,\n MakeReady = 250,\n Reno = 300,\n Punch = 350,\n Approval = 400,\n Marketing = 500,\n LeaseUp = 600,\n MoveIn = 700,\n Archive = 800,\n}\n","import { PermissionLevelType } from '@shared/enums/permission-level.enum';\n\nexport function checkPermissionLevel(\n permissionList: PermissionLevelType[],\n permissionLevel: PermissionLevelType | PermissionLevelType[],\n check: 'all' | 'any' = 'all'\n): boolean {\n if (!permissionList?.length) {\n return false;\n }\n\n if (!permissionLevel) {\n return true;\n }\n\n if (!Array.isArray(permissionLevel)) {\n permissionLevel = [permissionLevel];\n }\n\n /**\n * Check if superuser\n */\n if (permissionList.filter(value => value === PermissionLevelType.AllPermissions).length) {\n return true;\n }\n\n if (check == 'any') {\n return permissionLevel.some(v => permissionList.includes(v));\n }\n return !permissionLevel.some(v => !permissionList.includes(v));\n}\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestTurnoverBidCategory } from '@shared/interfaces/turnover-bids.interface';\n\nexport function getBidCategoriesRadioList(categories: RestTurnoverBidCategory[]): IRadioButtonOption[] {\n return categories.map>(item => {\n return {\n value: item.id,\n label: `${item.name}`,\n };\n });\n}\n","import { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getCompanyRadioList(companyList: RestCompanyModel[]): IRadioButtonOption[] {\n return companyList\n .filter(item => item.isActive)\n .map>(item => {\n return {\n value: item.id,\n label: `${item.displayName}`,\n };\n });\n}\n","import { getUtc } from '@shared/functions/get-utc.function';\n\nexport function getDateObjectFunction(date: Date | string): Date {\n return date ? getUtc(date) : null;\n}\n","import { EnumerationItemFields } from '@shared/enums/enumeration-item-fields';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getEnumerationRadioListFunction(\n enumerationItems: EnumerationItem[],\n nullValueLabel = 'All',\n withNullValue = true,\n valueKey = EnumerationItemFields.enumerationValue\n): IRadioButtonOption[] {\n const list: IRadioButtonOption[] = [];\n\n if (withNullValue) {\n list.push({\n label: nullValueLabel,\n value: null,\n });\n }\n\n (enumerationItems || []).forEach(item => {\n list.push({\n value: item[valueKey] as T,\n label: item.displayText,\n });\n });\n\n return list;\n}\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\n\nexport function getPortfolioProperties(userProperties: RestPropertyModel[]): IRadioButtonOption[] {\n return userProperties\n .map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n}\n","import { UserType } from '@shared/enums/user-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nexport function getUserList(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return {\n value: item.id,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getUserOrVendorList(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return item.userGroupType === UserType.Contractor\n ? {\n value: item.id,\n label: item.companyName,\n }\n : {\n value: item.id,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getUserOrVendorItems(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return item.userGroupType === UserType.Contractor\n ? {\n value: item,\n label: item.companyName,\n }\n : {\n value: item,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getUserItems(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return {\n value: item,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getUserListDisplayName(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return {\n value: item.id,\n label: item.displayName,\n };\n });\n}\n\nexport function getInternalUserList(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id && item.userGroupType === UserType.Employee)\n .map>(item => {\n return {\n value: item.id,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n","export function getUtc(date: Date | string): Date {\n if (typeof date === 'string') {\n date = new Date(date);\n }\n return date;\n}\n","export function parseNumber(value: string): number {\n value = value.toString().replace(/,/g, '');\n return parseFloat(value);\n}\n","import { RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport { BoardProgressType, BoardSourceType } from '@main-application/boards/interfaces/board.enums';\nimport { TicketAttachmentType, TurnoverAttachmentType } from '@shared/enums/attachment-type';\nimport { MoveOutType } from '@shared/enums/move-out-type.enum';\nimport { PreleaseAmountPaidType } from '@shared/enums/prelease-amount-paid-type';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { UnitConditionType } from '@shared/enums/unit-condition.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestBidModel } from '@shared/interfaces/bid.interface';\nimport { RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { RestListingPlatformModel } from '@shared/interfaces/listing-platform.interface';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/property.interface';\nimport { RestTimerInstanceModel } from '@shared/interfaces/rest-timer-instance-model';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { AttachmentType } from '@shared/types/attachment-type.type';\n\nexport interface TurnoverHeaderData {\n turnoverId: number;\n propertyName: string;\n unitName: string;\n currentTurnoverStep: WorkflowStepEnumType;\n moveOutType: MoveOutType;\n}\n\nexport interface RestAddressModel {\n propertyToAddressLinkId: number;\n Id: number;\n addressType: number;\n addressTypeUrn: string;\n title: string;\n street1: string;\n street2: string;\n city: string;\n state: string;\n zip: string;\n url: string;\n}\n\nexport interface RestWorkflowInstanceModel {\n id: number;\n turnoverId?: number;\n templateId?: number;\n isActive: boolean;\n isCompleted: boolean;\n completedUserId?: number;\n dateStarted?: Date;\n dateCompleted?: string;\n parentStepId?: number;\n workflowStepTemplateType: number;\n workflowStepEnumType: WorkflowStepEnumType;\n //int AssignmentRuleId: number // 0: N/A, 1: individual, 2: role: 3: creator\n //int? AssignmentObjectId?: number\n name: string;\n fullyQualifiedUrn: string;\n sortOrder: number;\n responsiblePartyId: number;\n responsiblePartyType: UserType;\n dueDate?: string;\n priority?: PriorityType;\n}\n\nexport interface RestMailingAddressModel {\n id: number;\n mailAddress: string;\n companyId: number;\n}\n\nexport interface RestTypedTurnoverAttachment {\n id: number;\n dateCreated?: string;\n dateUpdated?: string;\n isActive?: boolean;\n fileUploadId?: number;\n internalName?: string;\n originalFileName?: string;\n size?: number;\n url?: string;\n attachmentTypeUrn?: string;\n title?: string;\n description?: string;\n turnoverAttachmentType?: TurnoverAttachmentType;\n externalUrl?: string;\n}\n\nexport interface RestTurnoverAttachmentList {\n summary: RestTypedTurnoverAttachment;\n scopeOfWork: RestTypedTurnoverAttachment;\n photo: RestTypedTurnoverAttachment;\n other: RestTypedTurnoverAttachment;\n none: RestTypedTurnoverAttachment[];\n}\n\nexport interface TurnoverStepInfo {\n isStepNotAvailable: boolean;\n isStepCompleted: boolean;\n isTurnoverDeleted: boolean;\n isTurnoverComplete: boolean;\n turnoverDateDeleted?: Date | string;\n turnoverDateCompleted?: Date | string;\n}\n\nexport function isRestTurnoverDataModel(object: any): object is RestTurnoverDataModel {\n return (\n typeof object === 'object' &&\n typeof object.id === 'number' &&\n typeof object.unitId === 'number' &&\n typeof object.unitName === 'string'\n );\n}\n\nexport interface RestTurnoverDataModel {\n id: number;\n unitId: number;\n createdById: number;\n activeWorkflowStepId: number;\n propertyManagerId: number;\n propertyManager: RestUserModel;\n bulkScopeAndBidId: number;\n turnoverPriorityType: PriorityType;\n unitName: string;\n activeWorkflowStepType: WorkflowStepEnumType;\n constructionCost?: number;\n newRent?: number;\n newRentOverride?: number;\n oldRent?: number;\n oldRentOverride?: number;\n advertisedRent?: number;\n advertisedRentOverride?: number;\n marketRent?: number;\n marketRentOverride?: number;\n additionalData?: any;\n\n dateCreated: Date | string;\n dateUpdated: Date | string;\n dateCompleted: Date | string;\n dateCanceled: Date | string;\n dateMoveOut: Date;\n pmsMoveOutDate: Date | string;\n dateMoveIn: Date;\n dateShowable: Date | string;\n turnoverStartDate: Date | string;\n turnoverEndDate: Date | string;\n lastRentDate: Date | string;\n\n isCompleted: boolean;\n isCanceled: boolean;\n isMoveOutCompleted: boolean;\n isMoveInCompleted: boolean;\n isAutoCreated: boolean;\n\n // MOVE OUT\n isOccupiedInspected: boolean;\n isVacantInspected: boolean;\n dateOccupiedInspected: Date | string;\n dateVacantInspected: Date | string;\n moveOutType: MoveOutType;\n unitConditionType: UnitConditionType;\n\n // MAKE READY\n // BID\n finish: number;\n newFinish: number;\n oldFinish: number;\n sendingType: number;\n mailingTemplateBody: string;\n dateOffersSentOut: Date | string;\n dateOfferExpires: Date | string;\n\n // RENO\n // PUNCH\n // APPROVAL\n\n // MARKETING\n listingDescription: string;\n arePhotosNeeded: boolean;\n rentRate: number;\n securityDeposit: number;\n dateAvailable: Date | string;\n isSecurityDepositNegotiable: boolean;\n\n // LEASE UP\n leaseExecutionDate: Date | string;\n\n // MOVE IN\n isRentPaid: boolean;\n areKeysExchanged: boolean;\n isDepositPaid: boolean;\n isDocumentationAddedToExternalSystem: boolean;\n firstMonthRent: Date | string;\n additionalRentOrFees: string;\n\n // additional fields\n propertyAddress: string;\n state: string;\n postalCode: string;\n\n preleaseTenantEmail: string;\n preleaseTenantFirstName: string;\n preleaseTenantSurname: string;\n\n createdBy: RestUserModel;\n unit: RestUnitModel;\n property: RestPropertyModel;\n portfolio: RestPortfolioModel;\n workflow: RestWorkflowInstanceModel[];\n workflowStepComments: RestWorkflowStepCommentModel[];\n tickets: RestTicketModel[];\n listingPlatforms: RestListingPlatformModel[];\n bids: RestBidModel[];\n mailingList: RestMailingAddressModel[];\n attachments: RestTurnoverAttachmentList;\n allAttachments: RestGenericTypedAttachment[];\n timerInstance: RestTimerInstanceModel;\n turnStepSchedules: RestTurnStepScheduleModel[];\n\n ticketsAllCount: number;\n ticketsInProgressCount: number;\n totalTimeElapsed: string;\n\n hasMoveOutLabel: boolean;\n hasMoveInLabel: boolean;\n hasOccupiedLabel: boolean;\n hasAvailableOnLabel: boolean;\n hasEvictLabel: boolean;\n\n moveOutCountdown: number;\n moveInCountdown: number;\n occupiedCountdown: number;\n evictCountDown: number;\n availableOnCountdown: number;\n\n boardConnections: BoardConnection[];\n inspectionSummary: InspectionSummary;\n}\n\nexport enum PreleaseFilterMode {\n Not,\n Kinda,\n Strict,\n}\n\nexport interface InspectionSummary {\n id: number;\n inspectionId: number;\n lastCompletedAreaName: string;\n lastCompletedAreaAt: Date;\n completedAreas: number;\n completedAt: Date;\n deletedAt: Date;\n isCompleted: false;\n isDeleted: false;\n totalNumberOfAreas: number;\n turnoverId: number;\n}\n\nexport interface BoardConnection {\n boardDataSource: BoardSourceType;\n boardProgressType: BoardProgressType;\n boardId: number;\n boardName: string;\n completedStepSchedules: number;\n isCompleted: boolean;\n stepSchedulesTotal: number;\n lastCompletedScheduleDate: string;\n lastCompletedScheduleName: string;\n nextScheduleDate: string;\n nextScheduleName: string;\n}\n\nexport interface PostTurnoverModel {\n unitId: number;\n propertyId?: number;\n turnoverStartDate?: Date;\n turnoverEndDate?: Date;\n dateMoveOut?: Date;\n startWorkflowStepType: WorkflowStepEnumType;\n}\n\nexport interface NonPmsModelModel {\n id?: number;\n propertyId?: number;\n name: string;\n}\n\nexport interface RestTicketModel {\n id: number;\n workflowPhaseType?: WorkflowPhaseType;\n workflowStepEnumType?: WorkflowStepEnumType;\n ticketStatusType?: TicketStatusType;\n ticketPriorityType?: PriorityType;\n name?: string;\n detailedInformation?: string;\n partyName?: string; // Company name if Assignee.UserType == Contractor\n dueDate?: Date | string;\n dateCreated?: Date | string;\n dateUpdated?: Date | string;\n dateCompleted?: Date | string;\n startDate?: Date | string;\n endDate?: Date | string;\n createdById?: number;\n createdBy?: RestUserModel;\n assigneeId?: number; // aka ResponsiblePartyId\n assignee?: RestUserModel; // aka ResponsibleParty\n turnoverId?: number;\n turnoverData?: RestTurnoverDataModel;\n attachments?: RestTicketAttachmentList;\n allAttachments?: RestGenericTypedAttachment[];\n unitName?: string;\n unitId?: number;\n ticketType?: TicketType;\n propertyName?: string;\n}\n\nexport interface TicketListItem extends RestTicketModel {\n ableToResolve?: boolean;\n}\n\nexport interface RestTicketAttachmentList {\n ticketCustomCategory: RestTypedTicketAttachment;\n Uncategorized: RestTypedTicketAttachment[];\n}\n\nexport interface RestTypedTicketAttachment {\n id: number;\n dateCreated?: string;\n dateUpdated?: string;\n isActive?: true;\n fileUploadId?: number;\n internalName?: string;\n originalFileName?: string;\n size?: number;\n url?: string;\n attachmentTypeUrn?: string;\n title?: string;\n description?: string;\n ticketAttachmentType?: TicketAttachmentType;\n}\n\nexport interface UpdateTypedAttachmentToEntityModel {\n attachmentId?: number;\n unitId?: number;\n propertyId?: number;\n portfolioId?: number;\n turnoverIds?: number[];\n applianceId?: number;\n bidId?: number;\n ticketId?: number;\n attachmentType?: AttachmentType;\n fileUploadId?: number;\n title: string;\n description: string;\n externalUrl: string;\n}\n\nexport interface RestTurnoverTaskModel {\n id?: number;\n portfolioId?: number;\n turnoverDataId?: number;\n turnoverData?: RestTurnoverDataModel;\n priority?: PriorityType;\n dueDate?: string;\n workflowPhaseType?: WorkflowPhaseType;\n unitName?: string;\n propertyName?: string;\n propertyId?: number;\n assigneeId?: number;\n phasePriority?: PriorityType;\n vacancyLoss: number;\n moveInCalendarPosition: number;\n moveOutCalendarPosition: number;\n isNonPms?: boolean; //ToDo: remove it, temporary field until non-PMS is not moved to unit\n isNew?: boolean; //FE field - flag for detecting just adding turns\n}\n\nexport function isRestTurnoverTaskModel(object: any): object is RestTurnoverTaskModel {\n return typeof object === 'object' && typeof object.id === 'number' && isRestTurnoverDataModel(object.turnoverData);\n}\n\nexport interface RestWorkflowTemplate {\n id: number;\n name: string;\n fullyQualifiedUrn: string;\n sortOrder: number;\n workflowStepEnumType: WorkflowStepEnumType;\n}\n\nexport interface RestArchivedTurnover {\n id: number;\n newFinish: number;\n oldFinish?: number;\n propertyName: string;\n propertyId: number;\n turnoverEndDate: string | Date;\n turnoverStartDate: string | Date;\n unitName: string;\n unitId: number;\n unitType: string;\n workflow: RestWorkflowInstanceModel[];\n}\n\nexport interface MarkAsPreLEasedFormValue {\n responsibleParty: number;\n moveInDate: Date;\n rentAmount: number;\n securityDeposit: number;\n amountPaid: number;\n paymentMethod: PreleaseAmountPaidType;\n paymentDate: Date;\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@Pipe({\n name: 'enumerationValue',\n})\nexport class EnumerationValuePipe implements PipeTransform {\n transform(\n value: T | string,\n enumList: IRadioButtonOption[],\n showEmptyValue = false,\n defaultEmptyValue = ''\n ): T | string {\n return enumList?.find(enumItem => enumItem.value === value)?.label || (showEmptyValue ? defaultEmptyValue : value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'escapeHtml',\n})\nexport class EscapeHtmlPipe implements PipeTransform {\n transform(value: string): string {\n if (!value) {\n return '';\n }\n return value.replace(//g, '>');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'fileSize',\n})\nexport class FileSizePipe implements PipeTransform {\n transform(bytesNumber: number): string {\n if (bytesNumber < 1024) return `${bytesNumber} bytes`;\n\n const kBNumber = bytesNumber / 1024;\n if (kBNumber < 1024) return `${kBNumber.toFixed(0)} KB`;\n\n const mBNumber = kBNumber / 1024;\n if (mBNumber < 1024) return `${mBNumber.toFixed(0)} MB`;\n\n const gBNumber = mBNumber / 1024;\n if (gBNumber < 1024) return `${gBNumber.toFixed(0)} GB`;\n\n const tBNumber = gBNumber / 1024;\n if (tBNumber < 1024) return `${tBNumber.toFixed(0)} TB`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'isUserExisting',\n})\nexport class IsUserExistingPipe implements PipeTransform {\n transform(row: RestUserModel): boolean {\n return row.id !== 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { parseNumber } from '@shared/functions/parse-number';\n\n@Pipe({\n name: 'numberValidation',\n})\nexport class NumberValidationPipe implements PipeTransform {\n transform(value: string | number, min = 0, max?: number): unknown {\n const parsed = parseNumber(`${value}`);\n if (isNaN(parsed)) {\n return '';\n }\n if (parsed < min || (max !== undefined && parsed > max)) {\n return 'invalid';\n }\n return '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n name: 'trustHtml',\n})\nexport class TrustHtmlPipe implements PipeTransform {\n constructor(private domSanitized: DomSanitizer) {}\n\n transform(value: string): SafeHtml {\n return this.domSanitized.bypassSecurityTrustHtml(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { AttachmentType } from '@shared/types/attachment-type.type';\n\n@Pipe({\n name: 'turnoverAttachment',\n})\nexport class TurnoverAttachmentPipe implements PipeTransform {\n transform(\n attachmentList: RestGenericTypedAttachment[],\n attachmentType: AttachmentType\n ): RestGenericTypedAttachment[] {\n if (!attachmentList) {\n return [];\n }\n return attachmentList.filter(value => value.targetAttachmentType === attachmentType);\n }\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n clearUploadedFile,\n deleteFile,\n deleteFileFailed,\n deleteFileSuccess,\n uploadFile,\n uploadFileFail,\n uploadFileSuccess,\n} from '@shared/actions/file-upload.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UploadedFileItem } from '@shared/interfaces/uploaded-file-item.interface';\n\nexport const fileUploadFeatureKey = 'fileUpload';\n\nexport interface State {\n fileToUpload: File;\n fileToUploadLoading: boolean;\n uploadedFileItem: UploadedFileItem;\n deleteInProgress: boolean;\n deleteStatus: UpdateStatus;\n}\n\nexport const initialState: State = {\n fileToUpload: null,\n fileToUploadLoading: false,\n uploadedFileItem: null,\n deleteInProgress: false,\n deleteStatus: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * upload file\n */\n on(uploadFile, (state, action) => ({\n ...state,\n fileToUpload: action.file,\n fileToUploadLoading: true,\n })),\n on(uploadFileSuccess, (state, action) => ({\n ...state,\n uploadedFileItem: action.uploadedFileItem,\n fileToUploadLoading: false,\n })),\n on(uploadFileFail, (state, action) => ({\n ...state,\n uploadedFileItem: null,\n fileToUploadLoading: false,\n })),\n on(clearUploadedFile, (state, action) => ({\n ...state,\n fileToUpload: null,\n fileToUploadLoading: false,\n uploadedFileItem: null,\n })),\n\n /**\n * delete file\n */\n on(deleteFile, (state, action) => ({\n ...state,\n deleteInProgress: true,\n deleteStatus: UpdateStatus.UPDATE,\n })),\n on(deleteFileSuccess, (state, action) => ({\n ...state,\n deleteInProgress: false,\n deleteStatus: UpdateStatus.DELETED,\n })),\n on(deleteFileFailed, (state, action) => ({\n ...state,\n deleteInProgress: false,\n deleteStatus: UpdateStatus.ERROR,\n }))\n);\n","import { ActionReducer } from '@ngrx/store';\n\nexport const pathInitialValue = (initialState: T, key: string): T => {\n const storageValue = localStorage.getItem(key);\n if (storageValue) {\n try {\n const parsedValue = JSON.parse(storageValue);\n return { ...initialState, ...parsedValue };\n } catch {\n localStorage.removeItem(key);\n return initialState;\n }\n }\n return initialState;\n};\n\nexport const hydrationMetaReducer =\n (featureKey: string) =>\n (reducer: ActionReducer): ActionReducer => {\n return (state, action) => {\n const nextState = reducer(state, action);\n localStorage.setItem(featureKey, JSON.stringify(nextState));\n return nextState;\n };\n };\n","import { createReducer, on } from '@ngrx/store';\n\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\nimport { loadEnumerations, loadEnumerationsFailed, loadEnumerationsSuccess } from '../actions/enumerations.actions';\n\nexport const enumerationFeatureKey = 'enumeration';\n\nexport interface State {\n enumerationsLoading?: boolean;\n enumerations?: EnumerationConfig;\n}\n\nexport const initialState: State = {};\n\nexport const reducer = createReducer(\n initialState,\n on(loadEnumerations, (state, action) => ({ ...state, enumerationsLoading: true })),\n on(loadEnumerationsSuccess, (state, action) => ({\n ...state,\n enumerationsLoading: false,\n enumerations: action.enumerations,\n })),\n on(loadEnumerationsFailed, (state, action) => ({\n ...state,\n enumerationsLoading: false,\n enumerations: null,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nimport {\n loadUserById,\n loadUserByIdFailed,\n loadUserByIdSucceded,\n loadUserDataSucceded,\n loadUserTenantSucceeded,\n setAuthenticated,\n setUserGeneralRole,\n} from '../actions/user.actions';\n\nexport const userFeatureKey = 'user';\n\nexport interface UserState {\n tenantData?: TenantData;\n userData?: UserData;\n isAuthenticated?: boolean;\n selectedUser?: RestUserModel;\n selectedUserLoading?: boolean;\n}\n\nexport const initialState = {\n isAuthenticated: false,\n userData: {},\n tenantData: {},\n};\n\nexport const reducer = createReducer(\n initialState,\n on(loadUserDataSucceded, (state, action) => ({\n ...state,\n userData: action,\n })),\n\n on(loadUserTenantSucceeded, (state, action) => ({\n ...state,\n tenantData: action,\n })),\n\n on(setUserGeneralRole, (state, action) => ({\n ...state,\n userData: {\n ...state.userData,\n generalRole: action.roleName,\n },\n })),\n\n on(setAuthenticated, (state, action) => ({\n ...state,\n isAuthenticated: action.isAuthenticated,\n })),\n on(loadUserById, state => ({\n ...state,\n selectedUserLoading: true,\n })),\n on(loadUserByIdSucceded, (state, action) => ({\n ...state,\n selectedUser: action,\n selectedUserLoading: false,\n })),\n on(loadUserByIdFailed, (state, action) => ({\n ...state,\n selectedUserLoading: false,\n }))\n);\n","import * as fromEnumerationReducer from './enumeration.reducer';\nimport * as fromFileUploadReducer from './file-upload.reducer';\nimport { RouteState, reducer as RouteStateReducer, routeStateFeatureKey } from './route.reducer';\nimport * as fromUserReducer from './user.reducer';\nimport * as fromWindowResizeReducer from './window-resize.reducer';\n\nexport const CORE_FEATURE_KEY = 'coreModule';\n\nexport interface CoreModuleState {\n [fromUserReducer.userFeatureKey]: fromUserReducer.UserState;\n [fromEnumerationReducer.enumerationFeatureKey]: fromEnumerationReducer.State;\n [fromFileUploadReducer.fileUploadFeatureKey]: fromFileUploadReducer.State;\n [fromWindowResizeReducer.windowResizeFeatureKey]: fromWindowResizeReducer.State;\n [routeStateFeatureKey]: RouteState;\n}\n\nexport const reducers = {\n [fromUserReducer.userFeatureKey]: fromUserReducer.reducer,\n [fromEnumerationReducer.enumerationFeatureKey]: fromEnumerationReducer.reducer,\n [fromFileUploadReducer.fileUploadFeatureKey]: fromFileUploadReducer.reducer,\n [fromWindowResizeReducer.windowResizeFeatureKey]: fromWindowResizeReducer.reducer,\n [routeStateFeatureKey]: RouteStateReducer,\n};\n","import { createReducer, on } from '@ngrx/store';\n\nimport { setPreviousRoute } from '@shared/actions/route-state.action';\n\nexport const routeStateFeatureKey = 'routeState';\n\nexport interface RouteState {\n previousRoute?: string;\n}\n\nexport const initialState: RouteState = {\n previousRoute: undefined,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * set previous route\n */\n on(setPreviousRoute, (state, action) => ({\n ...state,\n previousRoute: action.previousRoute,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { setWindowWidth } from '@shared/actions/window-resize.actions';\n\nexport const windowResizeFeatureKey = 'windowResize';\n\nexport interface State {\n windowWidth: number;\n}\n\nexport const initialState: State = {\n windowWidth: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * set window width\n */\n on(setWindowWidth, (state, action) => ({\n ...state,\n windowWidth: action.windowWidth,\n }))\n);\n","import { createFeatureSelector } from '@ngrx/store';\n\nimport { CORE_FEATURE_KEY, CoreModuleState } from '../reducers';\n\nexport const selectCoreModule = createFeatureSelector(CORE_FEATURE_KEY);\n","import { createSelector } from '@ngrx/store';\n\nimport { selectCoreModule } from './core.selector';\n\nconst selectEnumerationState = createSelector(selectCoreModule, coreState => coreState.enumeration);\nexport const selectLoadEnumerations = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations\n);\n\nexport const selectLoadEnumerationsLoading = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerationsLoading\n);\n\nexport const selectDashboardViewType = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.dashboardViewType\n);\nexport const selectWorkflowPhasesEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.workflowPhases\n);\n\nexport const selectDelinquencyResultsEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.delinquencyResultTypes\n);\nexport const selectWorkflowStepsEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.workflowSteps\n);\n\nexport const selectRenewalResultTypesEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.renewalResultTypes\n);\n\n// getEnumerationRadioListFunction\nexport const selectFinishTypesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.finishType\n);\n\nexport const selectTimerTypesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.timerTypes\n);\n\nexport const selectPmsTypesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.pmsTypes\n);\n\nexport const selectNativeLanguagesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.nativeLanguage\n);\n","import { createSelector } from '@ngrx/store';\n\nimport { selectCoreModule } from './core.selector';\n\nconst selectUserState = createSelector(selectCoreModule, coreState => coreState.user);\nexport const selectUserData = createSelector(selectUserState, userState => userState.userData);\nexport const selectUserId = createSelector(selectUserData, userData => userData.id);\nexport const selectUserName = createSelector(selectUserData, userData => userData.name);\nexport const selectUserGeneralRole = createSelector(selectUserData, userData => userData.generalRole);\nexport const selectUserPermissionLevel = createSelector(\n selectUserState,\n userState => userState.userData?.permissionLevel\n);\nexport const selectIsAuthenticated = createSelector(selectUserState, userState => userState.isAuthenticated);\n\nexport const selectSelectedUser = createSelector(selectUserState, userState => userState.selectedUser);\nexport const selectSelectedUserLoading = createSelector(selectUserState, userState => userState.selectedUserLoading);\n\nexport const selectTenantData = createSelector(selectUserState, userState => userState.tenantData);\n","import { Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { tap } from 'rxjs';\n\nconst jwt = new JwtHelperService();\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private accessToken: string;\n\n constructor(private oidcService: OidcSecurityService) {}\n\n public isAuthenticated(): boolean {\n return !!this.accessToken;\n }\n\n public getAccessToken(): string {\n return this.accessToken;\n }\n\n public watchForAccessToken() {\n return this.oidcService.getAccessToken().pipe(tap(accessToken => (this.accessToken = accessToken)));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nimport { RouteData } from '@shared/enums/route-data';\n\nconst jwt = new JwtHelperService();\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HelpRouterService {\n constructor(private activatedRoute: ActivatedRoute) {}\n\n public getGlobalPreservedParams() {\n const queryParams = this.activatedRoute?.snapshot?.queryParams || {};\n return {\n [RouteData.PORTFOLIO_ID]: queryParams[RouteData.PORTFOLIO_ID],\n [RouteData.PROPERTY_ID]: queryParams[RouteData.PROPERTY_ID],\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions } from '@ngrx/effects';\n\n@Injectable()\nexport class WindowResizeEffects {\n constructor(private actions$: Actions) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\nimport { loadEnumerations, loadEnumerationsFailed, loadEnumerationsSuccess } from '../actions/enumerations.actions';\n\n@Injectable()\nexport class EnumerationEffects {\n loadEnumerations$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadEnumerations),\n exhaustMap(() =>\n this.restApiService.getData(`Enumerations`).pipe(\n map(result => loadEnumerationsSuccess({ enumerations: result })),\n catchError(err => of(loadEnumerationsFailed()))\n )\n )\n )\n );\n\n constructor(private actions$: Actions, private restApiService: RestapiService, private store: Store<{}>) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport {\n deleteFile,\n deleteFileFailed,\n deleteFileSuccess,\n uploadFile,\n uploadFileFail,\n uploadFileSuccess,\n} from '@shared/actions/file-upload.actions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable()\nexport class FileUploadEffects {\n constructor(\n private actions$: Actions,\n private store: Store<{}>,\n private snackbarService: SnackbarService,\n private fileUploadsService: FileUploadsService\n ) {}\n\n uploadFile$ = createEffect(() =>\n this.actions$.pipe(\n ofType(uploadFile),\n mergeMap(action =>\n this.fileUploadsService.uploadFile(action.file).pipe(\n map(uploadedFile =>\n uploadFileSuccess({\n uploadedFileItem: {\n uploadedFile,\n attachmentSection: action.attachmentSection,\n },\n })\n ),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.UploadingFile);\n return of(uploadFileFail());\n })\n )\n )\n )\n );\n\n deleteFile$ = createEffect(() =>\n this.actions$.pipe(\n ofType(deleteFile),\n mergeMap(action =>\n this.fileUploadsService.removeFile(action.fileId).pipe(\n map(uploadedFile => deleteFileSuccess()),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.DeletingFile);\n return of(deleteFileFailed());\n })\n )\n )\n )\n );\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TenantData } from '@shared/interfaces/tenant-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TenantService {\n constructor(private restApiService: RestapiService) {}\n\n getTenant(): Observable {\n return this.restApiService.getData('system/tenantInfo');\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map } from 'rxjs/operators';\n\nimport { TenantService } from '@app/services/tenant.service';\nimport { UserService } from '@app/services/user.service';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport {\n loadTenantData,\n loadUserById,\n loadUserByIdFailed,\n loadUserByIdSucceded,\n loadUserData,\n loadUserDataFailed,\n loadUserDataSucceded,\n loadUserTenantFailed,\n loadUserTenantSucceeded,\n} from '../actions/user.actions';\n\n@Injectable()\nexport class UserEffects {\n loadUserData$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUserData),\n exhaustMap(action =>\n this.userService.getCashedUserData().pipe(\n map(userData => loadUserDataSucceded(userData)),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingUserData);\n return of(loadUserDataFailed());\n })\n )\n )\n )\n );\n\n loadTenantData$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadTenantData),\n exhaustMap(action =>\n this.tenantService.getTenant().pipe(\n map(tenantData => loadUserTenantSucceeded(tenantData)),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTenantData);\n return of(loadUserTenantFailed());\n })\n )\n )\n )\n );\n\n loadUserDataById$ = createEffect(() =>\n this.actions$.pipe(\n ofType(loadUserById),\n exhaustMap(action =>\n this.userService.getUserById(action.userId).pipe(\n map(userData => loadUserByIdSucceded(userData)),\n catchError(() => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingUser);\n return of(loadUserByIdFailed());\n })\n )\n )\n )\n );\n\n constructor(\n private actions$: Actions,\n private userService: UserService,\n private snackbarService: SnackbarService,\n private tenantService: TenantService\n ) {}\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { Observable, throwError } from 'rxjs';\nimport { mergeMap } from 'rxjs';\nimport { map } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TokenInterceptor implements HttpInterceptor {\n constructor(\n private oidcSecurityService: OidcSecurityService,\n private snackbarService: SnackbarService,\n private router: Router\n ) {}\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n return this.oidcSecurityService.getAccessToken().pipe(\n map(token => {\n return request.clone({\n setHeaders: {\n Authorization: `Bearer ${token}`,\n 'X-Correlation-Id': uuidv4(),\n },\n });\n }),\n mergeMap(request =>\n next.handle(request).pipe(\n catchError(err => {\n if (err.status === 401) {\n this.snackbarService.error(SnackbarErrorMessage.UnauthorizedAccess);\n this.router.navigate([AppRoutes.NO_PERMISSION]);\n }\n return throwError(() => err);\n })\n )\n )\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\n\nimport { DashboardEffects } from '@main-application/dashboards/effects/dashboard.effects';\nimport { WindowResizeEffects } from '@shared/effects/window-resize.effects';\n\nimport { EnumerationEffects } from './effects/enumeration.effects';\nimport { FileUploadEffects } from './effects/file-upload.effects';\nimport { UserEffects } from './effects/user.effects';\nimport { TokenInterceptor } from './interceptors/token.interceptor';\nimport { CORE_FEATURE_KEY, reducers } from './reducers';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n EffectsModule.forFeature([\n UserEffects,\n EnumerationEffects,\n DashboardEffects,\n FileUploadEffects,\n WindowResizeEffects,\n ]),\n StoreModule.forFeature(CORE_FEATURE_KEY, reducers),\n ],\n declarations: [],\n providers: [\n JwtHelperService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: TokenInterceptor,\n multi: true,\n },\n ],\n})\nexport class SharedModule {}\n","
    \n \n \n
    \n\n\n
    \n
    \n \n \n \n \n {{\n attachmentItem?.originalFileName ||\n attachmentItem?.title ||\n newAttachmentItem.upload?.originalFileName ||\n newAttachmentItem.upload?.internalName ||\n ''\n }}\n
    \n
    \n
    \n
    {{ attachmentItem?.size || newAttachmentItem.upload?.size | fileSize }}
    \n \n
    \n \n
    \n\n\n
    \n
    \n \n \n \n \n
    \n \n
    \n
    \n\n\n \n \n \n\n\n\n \n {{ attachmentItem?.externalUrl || newAttachmentItem?.link || '' }}\n \n\n
    \n {{ attachmentItem?.externalUrl || newAttachmentItem?.link || '' }}\n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { copyToClipboard } from '@shared/functions/copy-to-clipboard.function';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { SnackbarErrorMessage } from '../customized-snackbar/snackbar-message.enum';\n\n@UntilDestroy()\n@Component({\n selector: 'app-attachment-item',\n templateUrl: './attachment-item.component.html',\n styleUrls: ['./attachment-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AttachmentItemComponent extends ComponentAbstract implements OnInit, OnDestroy {\n @Input() containerCss = '';\n @Input() attachmentItem: RestGenericTypedAttachment;\n @Input() newAttachmentItem: AttachmentItem;\n @Input() showDeleteBtn = true;\n @Input() trimLink = true;\n @Input() lockFields = false;\n @Input() lockDelete = false;\n @Input() labelCss = 'body-small';\n @Input() showFileSize = true;\n @Output() deleteEvent: EventEmitter = new EventEmitter();\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private snackbarService: SnackbarService,\n private fileUploadService: FileUploadsService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n\n deleteConfirmation() {\n this.deleteEvent.emit();\n }\n\n copyLink(event: Event) {\n event.stopPropagation();\n const result = copyToClipboard(this.attachmentItem?.externalUrl || this.newAttachmentItem?.link);\n if (result) {\n this.snackbarService.success(SnackbarErrorMessage.WebsiteAddressCopied);\n } else {\n this.snackbarService.error(SnackbarErrorMessage.CopyingWebsiteAddress);\n }\n }\n\n download(event: Event) {\n event.stopPropagation();\n if (this.attachmentItem) {\n this.fileUploadService.download(this.attachmentItem.fileUploadId);\n } else if (this.newAttachmentItem) {\n this.fileUploadService.download(this.newAttachmentItem.upload.id);\n }\n }\n\n getLink() {\n const link = this.attachmentItem?.externalUrl || this.newAttachmentItem?.link || '';\n return link.startsWith('http') ? link : `http://${link}`;\n }\n\n ngOnDestroy(): void {}\n}\n","/**\n * Copies passed string to clipboard\n * @param value string to copy\n */\nexport function copyToClipboard(value: string): boolean {\n const selBox = document.createElement('textarea');\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = value;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n const result = document.execCommand('copy');\n document.body.removeChild(selBox);\n return result;\n}\n","
    \n \n
    \n \n \n \n \n
    \n \n
    \n
    \n
    \n\n\n \n\n\n\n
    \n
    \n
    \n \n
    Uploading file...
    \n
    {{ (uploadingFile$ | async).name }}
    \n
    \n
    \n
    \n\n\n
    \n
    \n \n
    Drag & Drop
    \n
    \n
    or
    \n \n
    \n
    \n\n\n
    \n
    \n
    \n \n
    File uploaded
    \n
    {{ control.value.originalFileName }}
    \n
    \n
    \n
    \n","import { HttpEventType, HttpResponse } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, ValidationErrors } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { BehaviorSubject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { checkSupportedFormatFunction } from '@shared/functions/check-supported-format.function';\nimport { Upload } from '@shared/interfaces/upload';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-input-file',\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputFileComponent extends CustomControlAbstract implements OnInit, OnDestroy, ControlValueAccessor {\n errors: ValidationErrors;\n invalid = false;\n disabled = false;\n\n @Input() label = '';\n @Input() labelRequired = false;\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() contentCss = 'display-flex align-items-start';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = '';\n @Input() multiselect = false;\n @Input() acceptedFormats = ['application/pdf'];\n @Input() attrPlaceholder = 'Upload a file';\n @Input() uploadSelection = false;\n @Input() attrDisable = false;\n\n @Input() set value(value: string) {\n this.control.setValue(value);\n }\n\n @Output() clearEvent: EventEmitter = new EventEmitter();\n @Output() selectFilesEvent: EventEmitter = new EventEmitter();\n\n @ViewChild('fileUpload', { static: true }) input: ElementRef;\n\n uploadingFile$ = new BehaviorSubject(null);\n uploadingProgress$ = new BehaviorSubject(0);\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective,\n private fileUploadsService: FileUploadsService,\n private snackbarService: SnackbarService\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.onChanged(value);\n this.onTouched();\n if (!value) {\n this.uploadingFile$.next(null);\n }\n })\n )\n .subscribe();\n\n if (this.ngControl && this.ngControl.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n if (this.ngControl.control.touched) {\n this.control.markAsTouched();\n }\n this.invalid = this.ngControl.control.invalid;\n this.ngControl.control.statusChanges\n .pipe(untilDestroyed(this))\n .subscribe(status => this.checkControlStatus(status));\n }\n }\n\n ngOnDestroy(): void {}\n\n writeValue(value: any): void {\n this.control.setValue(value);\n }\n\n browseFile() {\n this.input.nativeElement.value = '';\n this.input.nativeElement.click();\n }\n\n clear($event: Event) {\n $event.stopPropagation();\n this.control.reset();\n this.clearEvent.emit();\n this.cdr.detectChanges();\n }\n\n filesDropped(files: File[]) {\n if (this.uploadSelection) {\n this.uploadFile(files);\n } else {\n this.emitEvents(files);\n }\n }\n\n inputFileChanged($event: Event) {\n const files: FileList = ($event.target as HTMLInputElement).files;\n const filesList = Object.entries(files).map(([key, file]) => file);\n if (this.uploadSelection) {\n this.uploadFile(filesList);\n } else {\n this.emitEvents(filesList);\n }\n }\n\n private emitEvents(files: File[]) {\n if (files && files.length) {\n this.selectFilesEvent.emit(files);\n this.control.setValue(files);\n this.cdr.detectChanges();\n }\n }\n\n private uploadFile(files: File[]) {\n const file = files[0];\n if (checkSupportedFormatFunction(file.type, this.acceptedFormats)) {\n this.uploadingFile$.next(file);\n this.uploadingProgress$.next(0);\n this.fileUploadsService.uploadFileProgress(file).subscribe({\n next: (event: any) => {\n if (event.type === HttpEventType.UploadProgress) {\n const progress = Math.round((100 * event.loaded) / event.total);\n this.uploadingProgress$.next(progress);\n this.cdr.detectChanges();\n } else if (event instanceof HttpResponse) {\n const upload = event.body as Upload;\n this.control.setValue(upload);\n this.uploadingProgress$.next(100);\n this.cdr.detectChanges();\n }\n },\n error: () => {\n this.snackbarService.error(SnackbarErrorMessage.UploadingFile);\n this.uploadingProgress$.next(0);\n },\n });\n } else {\n this.snackbarService.error(SnackbarErrorMessage.UnsupportedFileType);\n }\n }\n}\n","export function checkSupportedFormatFunction(type: string, acceptedFormatList: string[]): boolean {\n return acceptedFormatList?.includes(type) || true;\n}\n","
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n \n \n\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AttachmentComponentType } from '@shared/enums/attachment-component-type.enum';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { Upload } from '@shared/interfaces/upload';\n\nenum AttachmentComponentForm {\n AttachmentType = 'attachmentType',\n File = 'file',\n Link = 'link',\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-attachment',\n templateUrl: './attachment.component.html',\n styleUrls: ['./attachment.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AttachmentComponent extends ComponentAbstract implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n _attachmentItem: AttachmentItem;\n currentLink = null;\n urlRegex = /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/;\n fileUploadLoading = false;\n\n @Input() label = '';\n @Input() lockFields = false;\n @Input() linkContentCss = 'display-flex flex-column align-items-start flex-1';\n @Input() inputFileCss = 'flex-1';\n @Input() attrLabel = 'Attachment';\n @Input() containerCss = 'grid-gap-8';\n @Input() labelRequired = false;\n @Input() isEmpty = false;\n @Input() uploadInProgress = false;\n @Input() allowLink = true;\n @Input() keepSelection = false;\n @Input() acceptedFormats: string[];\n @Input() cleanInputAttachment: EventEmitter;\n @Output() attachmentItemEvent: EventEmitter = new EventEmitter();\n\n constructor(protected cdr: ChangeDetectorRef, private formBuilder: UntypedFormBuilder) {\n super(cdr);\n }\n\n get attachmentType(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.AttachmentType) as UntypedFormControl;\n }\n\n get file(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.File) as UntypedFormControl;\n }\n\n get link(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.Link) as UntypedFormControl;\n }\n\n setIsTouched() {\n this.showValidationError = true;\n }\n\n ngOnInit(): void {\n this.cleanInputAttachment\n ?.pipe(\n untilDestroyed(this),\n tap(() => {\n this.file.reset();\n this.link.reset();\n this._attachmentItem = {};\n this.currentLink = '';\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.initForm();\n\n this.file.valueChanges\n .pipe(\n untilDestroyed(this),\n filter((upload: Upload) => !!upload),\n tap((upload: Upload) => {\n this.attachmentItemEvent.emit({ upload });\n if (!this.keepSelection) {\n this.file.reset();\n }\n })\n )\n .subscribe();\n\n this.link.valueChanges\n .pipe(\n untilDestroyed(this),\n debounceTime(300),\n filter((link: string) => !!link && this.link.valid && link !== this.currentLink),\n tap((link: string) => {\n this.currentLink = link;\n })\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n private initForm() {\n this.form = this.formBuilder.group({\n [AttachmentComponentForm.AttachmentType]: [AttachmentComponentType.File],\n [AttachmentComponentForm.Link]: [null, [Validators.pattern(this.urlRegex)]],\n [AttachmentComponentForm.File]: [null, [Validators.required]],\n });\n }\n\n submitLink() {\n if (this.link.valid) {\n this.attachmentItemEvent.emit({ link: this.link.value });\n if (!this.keepSelection) {\n this.link.reset();\n }\n }\n }\n\n clearUploadedFile() {\n this.attachmentItemEvent.emit(null);\n }\n}\n","
    \n
    \n \n
    \n
    \n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { RestTypedTurnoverAttachment } from '@shared/interfaces/turnover.interface';\n\n@Component({\n selector: 'app-attachments-list',\n templateUrl: './attachments-list.component.html',\n styleUrls: ['./attachments-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AttachmentsListComponent implements OnInit {\n @Input() showEmpty = false;\n @Input() attachments: RestTypedTurnoverAttachment[];\n @Input() lockFields: boolean;\n @Output() removeAttachment = new EventEmitter();\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","
    \n \n \n \n \n \n
    \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n\n
    \n {{ buttonLabel }}\n \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { ButtonType } from '@shared/enums/button-type';\n\n@Component({\n selector: 'app-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent extends ComponentAbstract implements OnInit {\n @Input() buttonType = ButtonType.DEFAULT;\n @Input() buttonColor: ThemePalette = 'primary';\n @Input() buttonLabel = '';\n @Input() buttonLabelCss = 'letter-spacing';\n @Input() buttonCss = 'step-button';\n @Input() attrDisabled = false;\n @Input() isLoading = false;\n @Input() type: 'button' | 'reset' | 'submit';\n\n @Output() clickEvent: EventEmitter = new EventEmitter();\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n\n buttonClick() {\n this.clickEvent.emit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n ViewEncapsulation,\n forwardRef,\n} from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\nimport { MatCalendar, MatDatepickerIntl } from '@angular/material/datepicker';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-calendar-header',\n templateUrl: './calendar-header.component.html',\n styleUrls: ['./calendar-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarHeaderComponent extends ComponentAbstract implements OnInit, OnDestroy {\n constructor(\n private _intl: MatDatepickerIntl,\n @Inject(forwardRef(() => MatCalendar)) public calendar: MatCalendar,\n @Optional() private _dateAdapter: DateAdapter,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n protected cdr: ChangeDetectorRef\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.calendar.stateChanges\n .pipe(\n untilDestroyed(this),\n tap(() => this.cdr.markForCheck())\n )\n .subscribe();\n }\n\n ngOnDestroy(): void {}\n\n get periodLabel() {\n return this._dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthYearA11yLabel);\n }\n\n previousClicked() {\n this.calendar.activeDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1);\n }\n\n nextClicked() {\n this.calendar.activeDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1);\n }\n}\n","
    \n \n
    {{ periodLabel }}
    \n \n
    \n","/* From: https://github.com/component/textarea-caret-position */\n/* jshint browser: true */\n\n// (function () {\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize',\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && window['mozInnerScreenX'] != null;\n\nexport function getCaretCoordinates(element, position, options) {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n const debug = (options && options.debug) || false;\n if (debug) {\n const el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) el.parentNode.removeChild(el);\n }\n\n // The mirror div will replicate the textarea's style\n const div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) style.wordWrap = 'break-word'; // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug) style.visibility = 'hidden'; // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = parseInt(computed.height);\n const outerHeight =\n parseInt(computed.paddingTop) +\n parseInt(computed.paddingBottom) +\n parseInt(computed.borderTopWidth) +\n parseInt(computed.borderBottomWidth);\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n } else {\n style.lineHeight = '0';\n }\n } else {\n style.lineHeight = computed.height;\n }\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height)) style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput) div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n\n const span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight']),\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n}\n\n// if (typeof module != 'undefined' && typeof module.exports != 'undefined') {\n// module.exports = getCaretCoordinates;\n// } else if(isBrowser) {\n// window.getCaretCoordinates = getCaretCoordinates;\n// }\n\n// }());\n","function setValue(el: HTMLInputElement, value: any) {\n if (isInputOrTextAreaElement(el)) {\n el.value = value;\n } else {\n el.textContent = value;\n }\n}\n\nexport function getValue(el: HTMLInputElement) {\n return isInputOrTextAreaElement(el) ? el.value : el.textContent;\n}\n\nexport function insertValue(\n el: HTMLInputElement,\n start: number,\n end: number,\n text: string,\n iframe: HTMLIFrameElement,\n noRecursion = false\n) {\n if (isTextElement(el)) {\n const val = getValue(el);\n setValue(el, val.substring(0, start) + text + val.substring(end, val.length));\n setCaretPosition(el, start + text.length, iframe);\n } else if (!noRecursion) {\n const selObj: Selection = getWindowSelection(iframe);\n if (selObj && selObj.rangeCount > 0) {\n const selRange = selObj.getRangeAt(0);\n const position = selRange.startOffset;\n const anchorNode = selObj.anchorNode;\n insertValue(anchorNode, position - (end - start), position, text, iframe, true);\n }\n }\n}\n\nexport function isInputOrTextAreaElement(el: HTMLElement): boolean {\n return el != null && (el.nodeName == 'INPUT' || el.nodeName == 'TEXTAREA');\n}\n\nexport function isTextElement(el: HTMLElement): boolean {\n return el != null && (el.nodeName == 'INPUT' || el.nodeName == 'TEXTAREA' || el.nodeName == '#text');\n}\n\nexport function setCaretPosition(el: HTMLInputElement, pos: number, iframe: HTMLIFrameElement = null) {\n if (isInputOrTextAreaElement(el) && el.selectionStart) {\n el.focus();\n el.setSelectionRange(pos, pos);\n } else {\n const range = getDocument(iframe).createRange();\n range.setStart(el, pos);\n range.collapse(true);\n const sel = getWindowSelection(iframe);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n}\n\nexport function getCaretPosition(el: HTMLInputElement, iframe: HTMLIFrameElement = null) {\n if (isInputOrTextAreaElement(el)) {\n const val = el.value;\n return val.slice(0, el.selectionStart).length;\n } else {\n const selObj = getWindowSelection(iframe); //window.getSelection();\n if (selObj.rangeCount > 0) {\n const selRange = selObj.getRangeAt(0);\n const preCaretRange = selRange.cloneRange();\n preCaretRange.selectNodeContents(el);\n preCaretRange.setEnd(selRange.endContainer, selRange.endOffset);\n const position = preCaretRange.toString().length;\n return position;\n }\n }\n}\n\nfunction getDocument(iframe: HTMLIFrameElement) {\n if (!iframe) {\n return document;\n } else {\n return iframe.contentWindow.document;\n }\n}\n\nfunction getWindowSelection(iframe: HTMLIFrameElement): Selection {\n if (!iframe) {\n return window.getSelection();\n } else {\n return iframe.contentWindow.getSelection();\n }\n}\n\nexport function getContentEditableCaretCoords(ctx: { iframe: HTMLIFrameElement; parent?: Element }) {\n const markerTextChar = '\\ufeff';\n const markerId = 'sel_' + new Date().getTime() + '_' + Math.random().toString().substr(2);\n const doc = getDocument(ctx ? ctx.iframe : null);\n const sel = getWindowSelection(ctx ? ctx.iframe : null);\n const prevRange = sel.getRangeAt(0);\n\n // create new range and set postion using prevRange\n const range = doc.createRange();\n range.setStart(sel.anchorNode, prevRange.startOffset);\n range.setEnd(sel.anchorNode, prevRange.startOffset);\n range.collapse(false);\n\n // Create the marker element containing a single invisible character\n // using DOM methods and insert it at the position in the range\n const markerEl = doc.createElement('span');\n markerEl.id = markerId;\n markerEl.appendChild(doc.createTextNode(markerTextChar));\n range.insertNode(markerEl);\n sel.removeAllRanges();\n sel.addRange(prevRange);\n\n const coordinates = {\n left: 0,\n top: markerEl.offsetHeight,\n };\n\n localToRelativeCoordinates(ctx, markerEl, coordinates);\n\n markerEl.parentNode.removeChild(markerEl);\n return coordinates;\n}\n\nfunction localToRelativeCoordinates(\n ctx: { iframe: HTMLIFrameElement; parent?: Element },\n element: Element,\n coordinates: { top: number; left: number }\n) {\n let obj = element;\n let iframe = ctx ? ctx.iframe : null;\n while (obj) {\n if (ctx.parent != null && ctx.parent == obj) {\n break;\n }\n coordinates.left += obj.offsetLeft + obj.clientLeft;\n coordinates.top += obj.offsetTop + obj.clientTop;\n obj = obj.offsetParent;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n obj = element;\n iframe = ctx ? ctx.iframe : null;\n while (obj !== getDocument(null).body && obj != null) {\n if (ctx.parent != null && ctx.parent == obj) {\n break;\n }\n if (obj.scrollTop && obj.scrollTop > 0) {\n coordinates.top -= obj.scrollTop;\n }\n if (obj.scrollLeft && obj.scrollLeft > 0) {\n coordinates.left -= obj.scrollLeft;\n }\n obj = obj.parentNode;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n}\n","import {\n AfterContentChecked,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nimport { getCaretCoordinates } from './caret-coords';\nimport { getContentEditableCaretCoords, isInputOrTextAreaElement } from './mention-utils';\n\n/**\n * Angular Mentions.\n * https://github.com/dmacfarlane/angular-mentions\n *\n * Copyright (c) 2016 Dan MacFarlane\n */\n@Component({\n selector: 'app-mention-list',\n styleUrls: ['./mention-list.component.scss'],\n template: `\n \n {{ item[labelKey] }}\n \n \n \n \n \n \n \n \n `,\n})\nexport class MentionListComponent implements AfterContentChecked {\n @Input() labelKey = 'label';\n @Input() itemTemplate: TemplateRef;\n @Output() itemClick = new EventEmitter();\n @ViewChild('list', { static: true }) list: ElementRef;\n @ViewChild('defaultItemTemplate', { static: true }) defaultItemTemplate: TemplateRef;\n items = [];\n activeIndex = 0;\n hidden = false;\n dropUp = false;\n styleOff = false;\n private coords: { top: number; left: number } = { top: 0, left: 0 };\n private offset = 0;\n constructor(private element: ElementRef) {}\n\n ngAfterContentChecked() {\n if (!this.itemTemplate) {\n this.itemTemplate = this.defaultItemTemplate;\n }\n }\n\n // lots of confusion here between relative coordinates and containers\n position(nativeParentElement: HTMLInputElement, iframe: HTMLIFrameElement = null) {\n if (isInputOrTextAreaElement(nativeParentElement)) {\n // parent elements need to have postition:relative for this to work correctly?\n this.coords = getCaretCoordinates(nativeParentElement, nativeParentElement.selectionStart, null);\n this.coords.top = nativeParentElement.offsetTop + this.coords.top - nativeParentElement.scrollTop;\n this.coords.left = nativeParentElement.offsetLeft + this.coords.left - nativeParentElement.scrollLeft;\n // getCretCoordinates() for text/input elements needs an additional offset to position the list correctly\n this.offset = this.getBlockCursorDimensions(nativeParentElement).height;\n } else if (iframe) {\n const context: { iframe: HTMLIFrameElement; parent: Element } = { iframe: iframe, parent: iframe.offsetParent };\n this.coords = getContentEditableCaretCoords(context);\n } else {\n const doc = document.documentElement;\n const scrollLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n const scrollTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n // bounding rectangles are relative to view, offsets are relative to container?\n const caretRelativeToView = getContentEditableCaretCoords({ iframe: iframe });\n const parentRelativeToContainer: ClientRect = nativeParentElement.getBoundingClientRect();\n this.coords.top =\n caretRelativeToView.top - parentRelativeToContainer.top + nativeParentElement.offsetTop - scrollTop;\n this.coords.left =\n caretRelativeToView.left - parentRelativeToContainer.left + nativeParentElement.offsetLeft - scrollLeft;\n }\n // set the default/inital position\n this.positionElement();\n }\n\n get activeItem() {\n return this.items[this.activeIndex];\n }\n\n activateNextItem() {\n // adjust scrollable-menu offset if the next item is out of view\n const listEl: HTMLElement = this.list.nativeElement;\n const activeEl = listEl.getElementsByClassName('active').item(0);\n if (activeEl) {\n const nextLiEl: HTMLElement = activeEl.nextSibling;\n if (nextLiEl && nextLiEl.nodeName == 'LI') {\n const nextLiRect: ClientRect = nextLiEl.getBoundingClientRect();\n if (nextLiRect.bottom > listEl.getBoundingClientRect().bottom) {\n listEl.scrollTop = nextLiEl.offsetTop + nextLiRect.height - listEl.clientHeight;\n }\n }\n }\n // select the next item\n this.activeIndex = Math.max(Math.min(this.activeIndex + 1, this.items.length - 1), 0);\n }\n\n activatePreviousItem() {\n // adjust the scrollable-menu offset if the previous item is out of view\n const listEl: HTMLElement = this.list.nativeElement;\n const activeEl = listEl.getElementsByClassName('active').item(0);\n if (activeEl) {\n const prevLiEl: HTMLElement = activeEl.previousSibling;\n if (prevLiEl && prevLiEl.nodeName == 'LI') {\n const prevLiRect: ClientRect = prevLiEl.getBoundingClientRect();\n if (prevLiRect.top < listEl.getBoundingClientRect().top) {\n listEl.scrollTop = prevLiEl.offsetTop;\n }\n }\n }\n // select the previous item\n this.activeIndex = Math.max(Math.min(this.activeIndex - 1, this.items.length - 1), 0);\n }\n\n // reset for a new mention search\n reset() {\n this.list.nativeElement.scrollTop = 0;\n this.checkBounds();\n }\n\n // final positioning is done after the list is shown (and the height and width are known)\n // ensure it's in the page bounds\n private checkBounds() {\n let left = this.coords.left,\n dropUp = this.dropUp;\n const top = this.coords.top;\n const bounds: ClientRect = this.list.nativeElement.getBoundingClientRect();\n // if off right of page, align right\n if (bounds.left + bounds.width > window.innerWidth) {\n left -= bounds.left + bounds.width - window.innerWidth + 10;\n }\n // if more than half off the bottom of the page, force dropUp\n // if ((bounds.top+bounds.height/2)>window.innerHeight) {\n // dropUp = true;\n // }\n // if top is off page, disable dropUp\n if (bounds.top < 0) {\n dropUp = false;\n }\n // set the revised/final position\n this.positionElement(left, top, dropUp);\n }\n\n private positionElement(\n left: number = this.coords.left,\n top: number = this.coords.top,\n dropUp: boolean = this.dropUp\n ) {\n const el: HTMLElement = this.element.nativeElement;\n top += dropUp ? 0 : this.offset; // top of list is next line\n el.className = dropUp ? 'dropup' : null;\n el.style.position = 'absolute';\n el.style.left = left + 'px';\n el.style.top = top + 'px';\n }\n\n private getBlockCursorDimensions(nativeParentElement: HTMLInputElement) {\n const parentStyles = window.getComputedStyle(nativeParentElement);\n return {\n height: parseFloat(parentStyles.lineHeight),\n width: parseFloat(parentStyles.fontSize),\n };\n }\n}\n","import { ComponentFactoryResolver, Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { MentionConfig } from './mention-config';\nimport { MentionListComponent } from './mention-list.component';\nimport { getCaretPosition, getValue, insertValue, setCaretPosition } from './mention-utils';\n\nconst KEY_BACKSPACE = 8;\nconst KEY_TAB = 9;\nconst KEY_ENTER = 13;\nconst KEY_SHIFT = 16;\nconst KEY_ESCAPE = 27;\nconst KEY_SPACE = 32;\nconst KEY_LEFT = 37;\nconst KEY_UP = 38;\nconst KEY_RIGHT = 39;\nconst KEY_DOWN = 40;\nconst KEY_BUFFERED = 229;\n\n/**\n * Angular Mentions.\n * https://github.com/dmacfarlane/angular-mentions\n *\n * Copyright (c) 2017 Dan MacFarlane\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[mention], [mentionConfig]',\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '(keydown)': 'keyHandler($event)',\n '(input)': 'inputHandler($event)',\n '(blur)': 'blurHandler($event)',\n autocomplete: 'off',\n },\n})\nexport class MentionDirective implements OnChanges {\n // stores the items passed to the mentions directive and used to populate the root items in mentionConfig\n private mentionItems: any[];\n\n @Input('mention') set mention(items: any[]) {\n this.mentionItems = items;\n }\n\n // the provided configuration object\n @Input() mentionConfig: MentionConfig = { items: [] };\n\n private activeConfig: MentionConfig;\n\n private DEFAULT_CONFIG: MentionConfig = {\n items: [],\n triggerChar: '@',\n labelKey: 'label',\n maxItems: -1,\n allowSpace: false,\n returnTrigger: false,\n mentionSelect: (item: any, triggerChar?: string) => {\n return this.activeConfig.triggerChar + item[this.activeConfig.labelKey];\n },\n mentionFilter: (searchString: string, items: any[]) => {\n const searchStringLowerCase = searchString.toLowerCase();\n return items.filter(e => e[this.activeConfig.labelKey].toLowerCase().startsWith(searchStringLowerCase));\n },\n };\n\n // template to use for rendering list items\n @Input() mentionListTemplate: TemplateRef;\n\n // event emitted whenever the search term changes\n @Output() searchTerm = new EventEmitter();\n\n // event emitted when an item is selected\n @Output() itemSelected = new EventEmitter();\n\n // event emitted whenever the mention list is opened or closed\n @Output() opened = new EventEmitter();\n @Output() closed = new EventEmitter();\n\n private triggerChars: { [key: string]: MentionConfig } = {};\n\n private searchString: string;\n private startPos: number;\n private startNode;\n private searchList: MentionListComponent;\n private searching: boolean;\n private iframe: any; // optional\n private lastKeyCode: number;\n\n constructor(\n private _element: ElementRef,\n private _componentResolver: ComponentFactoryResolver,\n private _viewContainerRef: ViewContainerRef\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mention'] || changes['mentionConfig']) {\n this.updateConfig();\n }\n }\n\n public updateConfig() {\n const config = this.mentionConfig;\n this.triggerChars = {};\n // use items from directive if they have been set\n if (this.mentionItems) {\n config.items = this.mentionItems;\n }\n this.addConfig(config);\n // nested configs\n if (config.mentions) {\n config.mentions.forEach(config => this.addConfig(config));\n }\n }\n\n // add configuration for a trigger char\n private addConfig(config: MentionConfig) {\n // defaults\n const defaults = Object.assign({}, this.DEFAULT_CONFIG);\n config = Object.assign(defaults, config);\n // items\n let items = config.items;\n if (items && items.length > 0) {\n // convert strings to objects\n if (typeof items[0] == 'string') {\n items = items.map(label => {\n const object = {};\n object[config.labelKey] = label;\n return object;\n });\n }\n if (config.labelKey) {\n // remove items without an labelKey (as it's required to filter the list)\n items = items.filter(e => e[config.labelKey]);\n if (!config.disableSort) {\n items.sort((a, b) => a[config.labelKey].localeCompare(b[config.labelKey]));\n }\n }\n }\n config.items = items;\n\n // add the config\n this.triggerChars[config.triggerChar] = config;\n\n // for async update while menu/search is active\n if (this.activeConfig && this.activeConfig.triggerChar == config.triggerChar) {\n this.activeConfig = config;\n this.updateSearchList();\n }\n }\n\n setIframe(iframe: HTMLIFrameElement) {\n this.iframe = iframe;\n }\n\n stopEvent(event: any) {\n //if (event instanceof KeyboardEvent) { // does not work for iframe\n if (!event.wasClick) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n\n blurHandler(event: any) {\n this.stopEvent(event);\n this.stopSearch();\n }\n\n inputHandler(event: any, nativeElement: HTMLInputElement = this._element.nativeElement) {\n if (this.lastKeyCode === KEY_BUFFERED && event.data) {\n const keyCode = event.data.charCodeAt(0);\n this.keyHandler({ keyCode, inputEvent: true }, nativeElement);\n }\n }\n\n // @param nativeElement is the alternative text element in an iframe scenario\n keyHandler(event: any, nativeElement: HTMLInputElement = this._element.nativeElement) {\n this.lastKeyCode = event.keyCode;\n\n if (event.isComposing || event.keyCode === KEY_BUFFERED) {\n return;\n }\n\n const val: string = getValue(nativeElement);\n let pos = getCaretPosition(nativeElement, this.iframe);\n let charPressed = event.key;\n if (!charPressed) {\n const charCode = event.which || event.keyCode;\n if (!event.shiftKey && charCode >= 65 && charCode <= 90) {\n charPressed = String.fromCharCode(charCode + 32);\n }\n // else if (event.shiftKey && charCode === KEY_2) {\n // charPressed = this.config.triggerChar;\n // }\n else {\n // TODO (dmacfarlane) fix this for non-alpha keys\n // http://stackoverflow.com/questions/2220196/how-to-decode-character-pressed-from-jquerys-keydowns-event-handler?lq=1\n charPressed = String.fromCharCode(event.which || event.keyCode);\n }\n }\n if (event.keyCode == KEY_ENTER && event.wasClick && pos < this.startPos) {\n // put caret back in position prior to contenteditable menu click\n pos = this.startNode.length;\n setCaretPosition(this.startNode, pos, this.iframe);\n }\n\n const config = this.triggerChars[charPressed];\n if (config) {\n this.activeConfig = config;\n this.startPos = event.inputEvent ? pos - 1 : pos;\n this.startNode = (this.iframe ? this.iframe.contentWindow.getSelection() : window.getSelection()).anchorNode;\n this.searching = true;\n this.searchString = null;\n this.showSearchList(nativeElement);\n this.updateSearchList();\n\n if (config.returnTrigger) {\n this.searchTerm.emit(config.triggerChar);\n }\n } else if (this.startPos >= 0 && this.searching) {\n if (pos <= this.startPos) {\n this.searchList.hidden = true;\n }\n // ignore shift when pressed alone, but not when used with another key\n else if (\n event.keyCode !== KEY_SHIFT &&\n !event.metaKey &&\n !event.altKey &&\n !event.ctrlKey &&\n pos > this.startPos\n ) {\n if (!this.activeConfig.allowSpace && event.keyCode === KEY_SPACE) {\n this.startPos = -1;\n } else if (event.keyCode === KEY_BACKSPACE && pos > 0) {\n pos--;\n if (pos == this.startPos) {\n this.stopSearch();\n }\n } else if (this.searchList.hidden) {\n if (event.keyCode === KEY_TAB || event.keyCode === KEY_ENTER) {\n this.stopSearch();\n return;\n }\n } else if (!this.searchList.hidden) {\n if (event.keyCode === KEY_TAB || event.keyCode === KEY_ENTER) {\n this.stopEvent(event);\n // emit the selected list item\n this.itemSelected.emit(this.searchList.activeItem);\n // optional function to format the selected item before inserting the text\n const text = this.activeConfig.mentionSelect(this.searchList.activeItem, this.activeConfig.triggerChar);\n // value is inserted without a trailing space for consistency\n // between element types (div and iframe do not preserve the space)\n insertValue(nativeElement, this.startPos, pos, text, this.iframe);\n // fire input event so angular bindings are updated\n if ('createEvent' in document) {\n const evt = document.createEvent('HTMLEvents');\n if (this.iframe) {\n // a 'change' event is required to trigger tinymce updates\n evt.initEvent('change', true, false);\n } else {\n evt.initEvent('input', true, false);\n }\n // this seems backwards, but fire the event from this elements nativeElement (not the\n // one provided that may be in an iframe, as it won't be propogate)\n this._element.nativeElement.dispatchEvent(evt);\n }\n this.startPos = -1;\n this.stopSearch();\n return false;\n } else if (event.keyCode === KEY_ESCAPE) {\n this.stopEvent(event);\n this.stopSearch();\n return false;\n } else if (event.keyCode === KEY_DOWN) {\n this.stopEvent(event);\n this.searchList.activateNextItem();\n return false;\n } else if (event.keyCode === KEY_UP) {\n this.stopEvent(event);\n this.searchList.activatePreviousItem();\n return false;\n }\n }\n\n if (charPressed.length != 1 && event.keyCode != KEY_BACKSPACE) {\n this.stopEvent(event);\n return false;\n } else if (this.searching) {\n let mention = val.substring(this.startPos + 1, pos);\n if (event.keyCode !== KEY_BACKSPACE && !event.inputEvent) {\n mention += charPressed;\n }\n this.searchString = mention;\n if (this.activeConfig.returnTrigger) {\n const triggerChar =\n this.searchString || event.keyCode === KEY_BACKSPACE\n ? val.substring(this.startPos, this.startPos + 1)\n : '';\n this.searchTerm.emit(triggerChar + this.searchString);\n } else {\n this.searchTerm.emit(this.searchString);\n }\n this.updateSearchList();\n }\n }\n }\n }\n\n // exposed for external calls to open the mention list, e.g. by clicking a button\n public startSearch(triggerChar?: string, nativeElement: HTMLInputElement = this._element.nativeElement) {\n triggerChar = triggerChar || this.mentionConfig.triggerChar || this.DEFAULT_CONFIG.triggerChar;\n const pos = getCaretPosition(nativeElement, this.iframe);\n insertValue(nativeElement, pos, pos, triggerChar, this.iframe);\n this.keyHandler({ key: triggerChar, inputEvent: true }, nativeElement);\n }\n\n stopSearch() {\n if (this.searchList && !this.searchList.hidden) {\n this.searchList.hidden = true;\n this.closed.emit();\n }\n this.activeConfig = null;\n this.searching = false;\n }\n\n updateSearchList() {\n let matches: any[] = [];\n if (this.activeConfig && this.activeConfig.items) {\n let objects = this.activeConfig.items;\n // disabling the search relies on the async operation to do the filtering\n if (!this.activeConfig.disableSearch && this.activeConfig.labelKey) {\n if (this.activeConfig.mentionFilter) {\n objects = this.activeConfig.mentionFilter(this.searchString, objects);\n }\n }\n matches = objects;\n if (this.activeConfig.maxItems > 0) {\n matches = matches.slice(0, this.activeConfig.maxItems);\n }\n }\n // update the search list\n if (this.searchList) {\n this.searchList.items = matches;\n this.searchList.hidden = matches.length == 0;\n }\n }\n\n showSearchList(nativeElement: HTMLInputElement) {\n this.opened.emit();\n\n if (this.searchList == null) {\n const componentFactory = this._componentResolver.resolveComponentFactory(MentionListComponent);\n const componentRef = this._viewContainerRef.createComponent(componentFactory);\n this.searchList = componentRef.instance;\n this.searchList.itemTemplate = this.mentionListTemplate;\n componentRef.instance['itemClick'].subscribe(() => {\n nativeElement.focus();\n const fakeKeydown = { key: 'Enter', keyCode: KEY_ENTER, wasClick: true };\n this.keyHandler(fakeKeydown, nativeElement);\n });\n }\n this.searchList.labelKey = this.activeConfig.labelKey;\n this.searchList.dropUp = this.activeConfig.dropUp;\n this.searchList.styleOff = this.mentionConfig.disableStyle;\n this.searchList.activeIndex = 0;\n this.searchList.position(nativeElement, this.iframe);\n window.requestAnimationFrame(() => this.searchList.reset());\n }\n}\n","
    \n
    \n \n
    \n
    \n \n \n \n
    \n \n
    \n \n
    \n
    \n
    \n 0 && getValueLength() > maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value ? 'filled' : '',\n sendButton ? 'with-send' : '',\n useEmoji ? 'with-emoji' : ''\n ]\"\n [ngStyle]=\"{ 'max-height': maxHeight + 'px' }\"\n [formControl]=\"control\"\n [attr.aria-invalid]=\"invalid && showValidationError\"\n (blur)=\"onBlur()\"\n [mentionConfig]=\"mentionConfig\"\n (itemSelected)=\"mentionItemSelected($event)\"\n >
    \n
    \n send\n
    \n
    \n
    \n maxCounter ? 'text-color red3' : ''\"\n >\n [{{ getValueLength() }}/{{ maxCounter }}]\n
    \n
    \n \n \n \n\n\n\n
    \n
    ctr/cmd + enter: new line
    \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n UntypedFormControl,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { EmojiData, EmojiService } from '@ctrl/ngx-emoji-mart/ngx-emoji';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { flatten } from 'lodash';\nimport { tap } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { MentionConfig } from '@ui-components/components/mentions/mention-config';\n\nexport const StringNotEmptyValidator = (): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n const value = control?.value || '';\n if (value.replace(/
    /gim, '').trim() !== '') {\n return null;\n }\n return { stringNotEmptyValidator: true };\n };\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-content-editable-area',\n templateUrl: './content-editable-area.component.html',\n styleUrls: ['./content-editable-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ContentEditableAreaComponent\n extends CustomControlAbstract\n implements OnInit, OnDestroy, OnChanges, ControlValueAccessor\n{\n control = new UntypedFormControl('', [Validators.required, StringNotEmptyValidator()]);\n errors: ValidationErrors;\n invalid = false;\n disabled = false;\n emojiActive = false;\n storedSelectionRange: Range;\n\n @ViewChild(MatMenuTrigger) emmojiMenu: MatMenuTrigger;\n\n @Input() sendButton = false;\n @Input() autoresize = false;\n @Input() maxHeight: number;\n @Input() displayNewLineHint = false;\n @Input() attrPlaceholder = '';\n @Input() attrName: string;\n @Input() label: string;\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() contentCss = 'display-flex align-items-start';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = '';\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() labelRequired = false;\n @Input() displayCounter = false;\n @Input() maxCounter: number;\n @Output() keydownEnterEvent = new EventEmitter();\n @Output() blurEvent = new EventEmitter();\n @Input() userData: UserData;\n @Input() useEmoji = true;\n @Input() mentions: MentionConfig;\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable();\n } else {\n this.control.enable();\n }\n this.disabled = attrDisable;\n this.cdr.detectChanges();\n }\n\n @Input() set value(value: string) {\n this.control.setValue(this.convertValueToHtml(value));\n }\n\n readonly EMOJI_MAPPING = {\n ':)': ':slightly_smiling_face:',\n ';)': ':wink:',\n ':D': ':smile:',\n ':O': ':open_mouth:',\n ':(': ':worried:',\n ':P': ':stuck_out_tongue:',\n ':\\\\': ':confused:',\n ':|': ':neutral_face:',\n '8)': ':sunglasses:',\n };\n\n @ViewChild('editInput', { read: ElementRef, static: false }) editInput: ElementRef;\n\n defaultMentionConfig: MentionConfig = {\n items: [],\n labelKey: 'displayName',\n mentionSelect: () => {\n return '';\n },\n mentionFilter: (searchString: string, items: RestUserModel[]) => {\n const r = new RegExp(searchString?.toLowerCase(), 'i');\n return items.filter(\n x =>\n (searchString?.length === 2 &&\n x.firstName?.startsWith(searchString[0]) &&\n x.lastName?.startsWith(searchString[1])) ||\n r.test(x.displayName)\n );\n },\n triggerChar: '@',\n allowSpace: true,\n dropUp: true,\n };\n defaultEmojiMentionConfig: MentionConfig = {\n items: this.emojiService.emojis.map(e => ({ displayName: `${e.native} :${e.shortName}:`, ...e })),\n labelKey: 'displayName',\n mentionSelect: () => {\n return '';\n },\n mentionFilter: (searchString: string, items: EmojiData[]) => {\n if (searchString?.length >= 2) {\n const shortNameResults = items.filter(x => {\n const shortNames = [...x.shortName.split('_')];\n return shortNames.some(k => k.toLowerCase().startsWith(searchString?.toLowerCase()));\n });\n\n const keywordResults = items.filter(x => {\n const keywords = [...flatten(x.keywords.map(k => k.split('_')))];\n return keywords.some(k => k.toLowerCase().startsWith(searchString?.toLowerCase()));\n });\n return shortNameResults.concat(keywordResults);\n }\n return [];\n },\n maxItems: 100,\n triggerChar: ':',\n returnTrigger: true,\n allowSpace: false,\n dropUp: true,\n };\n mentionConfig: MentionConfig = { mentions: [] };\n\n // customEmojis = [\n // {\n // name: 'lyman-yes',\n // shortNames: ['lyman-yes'],\n // text: '',\n // emoticons: [],\n // keywords: ['lyman-yes'],\n // imageUrl: 'https://emoji.slack-edge.com/T8W1D98L8/lyman-yes/244c8c4e0c00ae79.gif',\n // },\n // ];\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n private emojiService: EmojiService,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.mentions || changes.useEmoji) {\n this.setMentions();\n this.cdr.detectChanges();\n }\n }\n\n setMentions() {\n const mentions = [];\n if (this.mentions) {\n mentions.push({ ...this.defaultMentionConfig, ...this.mentions });\n }\n if (this.useEmoji) {\n mentions.push({ ...this.defaultEmojiMentionConfig });\n }\n this.mentionConfig = { mentions: mentions };\n }\n\n ngOnInit(): void {\n this.setMentions();\n\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.onChanged(this.convertValueToString(value));\n this.onTouched();\n })\n )\n .subscribe();\n\n this.control.statusChanges\n .pipe(\n untilDestroyed(this),\n tap(() => {\n this.checkControlStatus(this.ngControl.control.status);\n })\n )\n .subscribe();\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n this.ngControl.control.statusChanges\n .pipe(\n untilDestroyed(this),\n tap(status => {\n this.checkControlStatus(status);\n })\n )\n .subscribe();\n }\n }\n\n ngOnDestroy(): void {}\n\n writeValue(value: any): void {\n this.control.setValue(value);\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n\n enter($event) {\n if (this.keydownEnterEvent.observed) {\n this.send();\n $event.preventDefault();\n }\n }\n\n space($event) {\n this.validateInput();\n }\n\n send() {\n if (this.control.valid) {\n this.keydownEnterEvent.emit();\n }\n }\n\n insertBr() {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const fragment = document.createDocumentFragment();\n fragment.append(document.createElement('br'));\n const text = document.createTextNode('\\u200B');\n fragment.append(text);\n range.insertNode(fragment);\n range.collapse();\n this.cdr.detectChanges();\n }\n }\n\n mentionItemSelected($event: RestUserModel | EmojiData) {\n if (!$event) {\n return;\n }\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n\n const user = $event as RestUserModel;\n if (user.email) {\n const fragment = document.createDocumentFragment();\n const text = document.createTextNode(' \\u200B');\n const node = document.createElement('span');\n node.textContent = '@' + user.displayName;\n node.className = `user-mention ${this.userData?.id === user.id ? 'me' : ''}`;\n node.setAttribute('contentEditable', 'false');\n node.setAttribute('email', user.email);\n fragment.append(node);\n fragment.append(text);\n range.insertNode(fragment);\n setTimeout(() => {\n selection.removeAllRanges();\n const nodeRange = new Range();\n nodeRange.setStartAfter(text);\n nodeRange.setEndAfter(text);\n selection.addRange(range);\n selection.collapseToEnd();\n this.cdr.detectChanges();\n }, 0);\n }\n const emoji = $event as EmojiData;\n if (emoji.native) {\n const text = document.createTextNode(emoji.native);\n range.insertNode(text);\n setTimeout(() => {\n range.setStartAfter(text);\n range.setEndAfter(text);\n selection.removeAllRanges();\n selection.addRange(range);\n selection.collapseToEnd();\n this.control.setValue(this.editInput.nativeElement.innerHTML, { emitModelToViewChange: false });\n this.cdr.detectChanges();\n }, 0);\n }\n }\n }\n\n private convertValueToHtml(strContent: string): string {\n return strContent;\n }\n\n private convertValueToString(htmlContent: string): string {\n if (!htmlContent) {\n return '';\n }\n\n const div = document.createElement('div');\n div.innerHTML = htmlContent.trim();\n const mentions = div.querySelectorAll('.user-mention');\n mentions.forEach(m => {\n m.replaceWith(document.createTextNode(`[~${m.getAttribute('email')}]`));\n });\n const brs = div.querySelectorAll('br');\n brs.forEach(m => {\n m.replaceWith(document.createTextNode('\\n'));\n });\n\n let content = div.textContent;\n\n Object.keys(this.EMOJI_MAPPING).forEach(key => {\n const regex = new RegExp(` ${key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}`, 'gmi');\n const emoji = this.emojiService.emojis.find(x => x.colons === this.EMOJI_MAPPING[key]);\n if (emoji) {\n content = content.replace(regex, ` ${emoji.native}`);\n if (content === key) {\n content = emoji.native;\n }\n }\n });\n\n return content;\n }\n\n getValueLength() {\n return this.convertValueToString(this.control.value).length;\n }\n\n addEmoji($event: any) {\n const selection = window.getSelection();\n if (selection && this.storedSelectionRange) {\n selection.removeAllRanges();\n selection.addRange(this.storedSelectionRange);\n if (selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const text = document.createTextNode($event.emoji.native);\n range.insertNode(text);\n range.setStartAfter(text);\n range.setEndAfter(text);\n selection.removeAllRanges();\n selection.addRange(range);\n selection.collapseToEnd();\n this.control.setValue(this.editInput.nativeElement.innerHTML, { emitModelToViewChange: false });\n }\n } else {\n const value = this.control.value || '';\n this.control.setValue(value + $event.emoji.native);\n }\n this.emmojiMenu.closeMenu();\n this.cdr.detectChanges();\n }\n\n stopPropagation($event: MouseEvent) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n storeSelection() {\n this.storedSelectionRange = null;\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n if (this.editInput.nativeElement.contains(range.startContainer)) {\n this.storedSelectionRange = range;\n }\n }\n }\n\n validateInput() {\n setTimeout(() => {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n const emojiText = range.startContainer.textContent.substring(range.endOffset - 3, range.endOffset - 1);\n const mapValue = this.EMOJI_MAPPING[emojiText];\n if (mapValue) {\n const emoji = this.emojiService.emojis.find(x => x.colons === mapValue);\n if (emoji) {\n range.setStart(range.startContainer, range.endOffset - 3);\n const emojiNode = document.createTextNode(emoji.native + ' ');\n range.deleteContents();\n range.insertNode(emojiNode);\n range.setStart(emojiNode, 2);\n range.setEnd(emojiNode, 2);\n selection.removeAllRanges();\n selection.addRange(range);\n this.control.setValue(this.editInput.nativeElement.innerHTML, { emitModelToViewChange: false });\n }\n }\n }\n }, 0);\n }\n}\n","export enum SnackbarErrorMessage {\n RetrievingCompanyList = 'Error retrieving company list',\n RetrievingCompanyData = 'Error retrieving company data',\n AddingNewVendor = 'Error adding new vendor',\n UpdatingVendor = 'Error updating vendor',\n DeletingVendor = 'Error deleting vendor',\n AddingEmployee = 'Error adding employee',\n DeletingEmployee = 'Error deleting employee',\n RetrievingVendors = 'Error retrieving vendors',\n AddingAddress = 'Error adding address',\n UpdatingAddress = 'Error updating address',\n\n T01RetrievingTasks = 'Error T01 retrieving tasks',\n T02RetrievingTasks = 'Error T02 retrieving tasks',\n RetrievingMyTasks = 'Error retrieving my tasks',\n T03RetrievingTasks = 'Error T03 retrieving tasks',\n T04RetrievingTasks = 'Error T04 retrieving tasks',\n LoadingTurnoverSummary = 'Error loading turnover summary',\n LoadingTurnoverDetails = 'Error loading turnover details',\n LoadingDelinquencySummary = 'Error loading delinquency summary',\n LoadingDelinquencyDetails = 'Error loading delinquency details',\n LoadingRenewalsSummary = 'Error loading renewals summary',\n LoadingUnitDetails = 'Error loading unit details',\n LoadingUnitDetailsByProperty = 'Error loading unit details by property',\n LoadingRenewalDetails = 'Error loading renewal details',\n LoadingProperties = 'Error loading properties',\n UL01LoadingUnitList = 'Error UL01 loading unit list',\n UL02LoadingUnitList = 'Error UL02 loading unit list',\n LoadingUnit = 'Error loading unit',\n UpdatingUnit = 'Error updating unit',\n LoadingAppliances = 'Error loading appliances',\n RetrievingRenealStrategy = 'Error retrieving renewal strategy',\n\n DL01RetrievingDelinquencyList = 'Error DL01 retrieving delinquency list',\n DL02RetrievingDelinquencyList = 'Error DL02 retrieving delinquency list',\n UpdatingDelinquency = 'Error updating delinquency',\n RetrievingDelinquencyHistory = 'Error retrieving delinquency history',\n\n RetrievingTurnoverConfigurationList = 'Error retrieving turnover configuration list',\n RetrievingTurnoverConfigurationElement = 'Error retrieving turnover configuration element',\n UpdatingTurnoverFieldConfiguration = 'Error updating turnover field configuration',\n\n ExecutingUpdate = 'Error executing update',\n RetrievingRenewalStrategies = 'Error retrieving renewal strategies',\n UpdatingRenewalStrategy = 'Error updating renewal strategy',\n\n RetrievingPropertyManagersMoveOut = \"Error retrieving property manager's move out\",\n RetrievingAssetManagersMoveOut = \"Error retrieving asset manager's move out\",\n RetrievingPropertyManagersArchivedMoveOut = \"Error retrieving property manager's archived move out\",\n RetrievingAssetManagersArchivedMoveOut = \"Error retrieving asset manager's archived move out\",\n\n RetrievingNotificationList = 'Error retrieving notification list',\n MarkingAllNotificationsAsRead = 'Error marking all notifications as read',\n MarkingNotificationAsRead = 'Error marking notification as read',\n DeletingNotification = 'Error deleting notification',\n\n EstablishingSignalRConnection = `Error establishing signalr connection: `,\n\n UnsupportedFileType = 'Unsupported file type',\n UploadingFile = 'Error uploading file',\n\n LoadingPortfoliosList = \"Error loading portfolio's list\",\n LoadingPortfolio = 'Error loading portfolio',\n LoadingPropertyDetails = 'Error loading property details',\n LoadingAllUserProperties = 'Error loading all user properties',\n LoadingUnassignedUserProperties = 'Error loading unassigned user properties',\n UpadtingPortfolio = 'Error updating portfolio',\n WhileAddingNewPropertyToPortfolio = 'Error while adding new property to portfolio',\n WhileDeletingPropertyFromPortfolio = 'Error while deleting property from portfolio',\n WhileCreatingNewPortfolio = 'Error while creating new portfolio',\n RetrievingPropertyManagers = 'Error retrieving property managers',\n RetrievingPropertyManagersForProperty = 'Error retrieving property managers for property',\n UpdatingPropertyDetails = 'Error updating property details',\n RemovingPortfolio = 'Error removing portfolio',\n RemovingManagerFromProperty = 'Error removing manager from property',\n AssigningManagerToProperty = 'Error assigning manager to property',\n RetrievingPropertyUnits = 'Error retrieving property units',\n RetrievingUnitsAttachments = 'Error retrieving units attachments',\n\n //Template\n LoadingTemplatesList = \"Error loading template's list\",\n RemovingTemplate = 'Error removing template',\n RemovingTemplateInUse = 'Template cannot be deleted because it is in use',\n LoadingUnitTypes = \"Error loading unit type's list\",\n UpdatingTemplate = 'Error updating template',\n WhileCreatingNewTemplate = 'Error while creating new template',\n WhileDeletingPropertyFromTemplate = 'Error while deleting space from template',\n\n //SpaceTemplate\n LoadingSpaceTemplatesList = \"Error loading space template's list\",\n RemovingSpaceTemplate = 'Error removing space template',\n UpadtingSpaceTemplate = 'Error updating space template',\n LoadingCategories = \"Error loading category's list\",\n WhileCreatingNewSpaceTemplate = 'Error while creating new space template',\n\n //Inspections\n LoadingInspectionsList = \"Error loading inspection's list\",\n RemovingInspection = 'Error removing inspection',\n UpadtingInspection = 'Error updating inspection',\n WhileCreatingNewInspection = 'Error while creating new inspection',\n WhileAddingNewSharedSpace = 'Error while adding new shared space',\n\n // message\n AddingAttachment = 'Error adding attachment',\n AddingPhoto = 'Error adding photo',\n AddingFloorplan = 'Error adding floorplan',\n\n // message\n DeletingAttachment = 'Error deleting attachment',\n DeletingPhoto = 'Error deleting photo',\n DeletingFloorplan = 'Error deleting floorplan',\n\n DeletingFile = 'Error deleting file',\n\n RetrievingRenewalsList = 'Error retrieving renewals list',\n RetrievingRenewalData = 'Error retrieving renewal data',\n RetrievingRenewalStrategy = 'Error retrieving renewal strategy',\n UpdatingRenewal = 'Error updating renewal',\n RetrievingRenewalChangesHistory = 'Error retrieving renewal changes history',\n\n WhileLoadingResponsibleParties = 'Error while loading responsible parties',\n WhileCreatingAssignee = 'Error while creating assignee',\n WhileUpdatingAssignee = 'Error while updating assignee',\n\n RetrievingUserData = 'Error retrieving user data',\n RetrievingTenantData = 'Error retrieving tenant data',\n RetrievingUser = 'Error retrieving user',\n\n UnauthorizedAccess = 'Unauthorized access. Please contact administrator.',\n\n RetrievingTicketList = 'Error retrieving ticket list',\n UpdatingTicket = 'Error updating ticket',\n\n CannotAcceptBid = 'You cannot accept until a bid has been received.',\n\n TurnoverAutomaticallyCreated = 'Remember to change this date in your PMS too!',\n AvailableCannotBeModifiedAfterApproval = 'Available cannot be modified after APPROVAL',\n\n RequiredFieldsCannotBeEmpty = 'Required fields cannot be empty.',\n\n CannotChangeUnitCondition = 'You cannot change unit condition after inspection has been completed. If you need to do this, please delete and recreate this turnover.',\n CompleteVacantOrOccupied = 'Complete Occupied inspection or Vacant inspection before moving to the next step.',\n CompleteOccupiedInspection = 'Complete Occupied inspection first',\n CompleteVacantInspection = 'Complete Vacant inspection first',\n\n InvalidFileExtension = `Invalid file extension. Accepted formats: `,\n\n UnitConditionForOccupiedInspection = 'Unit condition is required for Occupied inspection.',\n MoveOutTypeForOccupiedInspection = 'Move out type is required for Occupied inspection.',\n\n UnitConditionForVacantInspection = 'Unit condition is required for Vacant inspection.',\n MoveOutTypeForVacantInspection = 'Unit status is required for Vacant inspection.',\n VacantInspectionCannotOccur = 'Vacant Inspection cannot occur before Move Out Date of: ',\n\n AtLeastOnePhoto = 'At least one photo must be added before continuing.',\n\n BidMustBeAccepted = 'A bid must be accepted before Renovation can begin.',\n\n JobCannotStartUntil = `Job cannot start until tenant moves out on: `,\n\n CreatingBulkScope = 'Error creating bulk scope',\n RetrievingBulkScope = 'Error retrieving bulk scope',\n UpdatingBulkScope = 'Error updating bulk scope',\n RetrievingBulkScopeList = 'Error retrieving bulk scope list',\n\n CreatingTurnover = 'Error creating turnover',\n AssigningAssignee = 'Error assigning assignee',\n RetrievingTurnoverData = 'Error retrieving turnover data',\n UpdatingTurnoverData = 'Error updating turnover data',\n ErrorUpdatingTurnoverStepAssignee = 'Error updating assignee',\n ErrorRetrievingDefaultTurnoverAssignees = 'Error retrieving default assignees',\n ChangingTurnoverStep = 'Error changing step',\n RefreshingTimer = 'Error refreshing timer',\n AssigningAttachmentToEntity = 'Error assigning attachment to entity',\n UpdatingAttachment = 'Error updating attachment',\n RetrievingTurnoverTickets = 'Error retrieving tickets',\n CreatingTicket = 'Error creating ticket',\n TicketCreated = 'Ticket created',\n TicketUpdated = 'Ticket updated',\n UpdatingTurnoverTicket = 'Error updating ticket',\n RetrievingTurnoverTicket = 'Error retrieving ticket',\n DeletingTicket = 'Error deleting ticket',\n AssigningAttachmentToTicket = 'Error attaching to ticket',\n RetrievingTicket = 'Error retrieving ticket',\n RetrievingTicketAttachment = 'Error retrieving ticket attachments',\n RetrievingCompaniesList = 'Error retrieving companies',\n RetrievingBidList = 'Error retrieving bids',\n RetrievingVendorsList = 'Error retrieving vendors',\n RetrievingBid = 'Error retrieving bid',\n AddingBid = 'Error adding bid',\n UpdatingBid = 'Error updating bid',\n AssigningAttachmentToBid = 'Error attachming to bid',\n RetrievingApplianceData = 'Error retrieving appliance data',\n ReceivingTurnoverComments = 'Error receiving conversation',\n AddingComment = 'Error adding comment',\n UpdatingComment = 'Error updating comment',\n Deletingcomment = 'Error deleting comment',\n LoadingworkflowAssignment = 'Error loading workflow assignment',\n DeletingTurnover = 'Error deleting turn',\n DeletingFileFromRepository = 'Error deleting file',\n RetrievingTurnoverAttachmentList = 'Error retrieving turn attachments',\n RetrievingBidAttachmentList = 'Error retrieving bid attachments',\n\n AllPunchTicketsMustBeDone = 'All punch tickets must be marked as done.',\n\n // TODO - it shouldn't be error message\n WebsiteAddressCopied = 'Website address copied (Ctrl + V to paste)',\n CopyingWebsiteAddress = 'Error copying website address',\n\n ErrorInvitingUser = 'Error inviting user',\n ErrorWrongEmail = 'Invalid email address',\n ErrorUserAlreadyExist = 'user {0} already exists',\n ErrorUpdatingUser = 'Error updating user',\n ErrorAssigningUserToRole = 'Error assigning user to role',\n ErrorAssigningUserToProperty = 'Error assigning user to property',\n ErrorRemovingPropertyAssignedUser = 'Error removing user',\n\n ErrorRetrievingSystemConfig = 'Error retrieving system configuration',\n ErrorRetrievingSlackChannels = 'Error retrieving slack channels',\n ErrorRetrievingTimerReport = 'Error retrieving timer report',\n SlackAdded = 'Slack successfully added',\n ErrorUpdatingSlackChannel = 'Error updating slack channel',\n ErrorUpdatingSystemConfig = 'Error updating system configuration',\n ErrorRetrievingElapsedDaysThresholds = 'Error retrieving elapsed days thresholds',\n ErrorUpdatingElapsedDaysThresholds = 'Error updating elapsed days thresholds',\n\n ErrorPortfolioKpi = 'Error getting portfolio KPIs',\n ErrorAddingFinish = 'Error adding new finish',\n ErrorUpdatingFinish = 'Error updating finish',\n ErrorDeletingFinish = 'Error deleting finish',\n ErrorLoadingFinish = 'Error loading finish',\n\n ErrorSurveysTemplates = 'Error getting inspection templates',\n ErrorSavingSurveyTemplate = 'Error saving inspection template',\n SuccessSavingSurveyTemplate = 'Inspection template saved',\n\n CommentLinkCopied = 'Comment link copied',\n\n ErrorSendingInspectionReport = 'Send inspection report failed',\n InspectionReportSentSuccessfully = 'Inspection report sent successfully',\n\n BuildiumSetupCompleted = 'Buildium setup is complete',\n BuildiumSetupIncompleted = 'Builidum setup has failed, please contact support',\n BoardEditPermissionRequired = 'Permission: board_edit required',\n TurnEditPermissionRequired = 'Permission: propertymanager_activeturnovers_edit required',\n\n AllPortfoliosHasBeenUpdated = 'All portfolios updated',\n AllPropertiesHasBeenUpdated = 'All properties updated',\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\nimport { SnackbarService } from '../snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-customized-snackbar',\n templateUrl: './customized-snackbar.component.html',\n styleUrls: ['./customized-snackbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CustomizedSnackbarComponent extends ComponentAbstract implements OnInit, OnDestroy {\n constructor(\n private snackbarService: SnackbarService,\n protected cdr: ChangeDetectorRef,\n @Inject(MAT_SNACK_BAR_DATA) public data: string\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n\n dismiss() {\n this.snackbarService.dismiss();\n }\n\n ngOnDestroy(): void {}\n}\n","
    \n \n
    \n \n
    \n
    \n","import { Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { Observable, tap } from 'rxjs';\n\nimport { SidePanelService } from '@app/services/side-panel.service';\n\nimport { CustomizedSnackbarComponent } from './component/customized-snackbar.component';\nimport { SnackbarErrorMessage } from './snackbar-message.enum';\n\n// enum Snackbar\nenum SnackBarCss {\n Success = 'snackbar-success',\n Failure = 'snackbar-failure',\n Warning = 'snackbar-warning',\n Info = 'snackbar-info',\n}\n\nenum NotificationPositionCss {\n WithSidePanel = 'notification-with-side-panel',\n WithoutPanel = 'notification-without-side-panel',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackbarService {\n notificationClass = 'customized-notification';\n positionCss = NotificationPositionCss.WithSidePanel;\n snackBarRef: MatSnackBarRef;\n\n constructor(private snackBar: MatSnackBar, private sidePanelService: SidePanelService) {}\n\n watchForSidePanel(): Observable {\n return this.sidePanelService.isSidePanelExpanded$.pipe(\n tap(isExpanded => {\n this.positionCss = isExpanded ? NotificationPositionCss.WithSidePanel : NotificationPositionCss.WithoutPanel;\n })\n );\n }\n\n success(message: SnackbarErrorMessage | string, duration = 10000) {\n this.openNotification(message, SnackBarCss.Success, duration);\n }\n\n error(message: SnackbarErrorMessage | string, duration = 10000) {\n this.openNotification(message, SnackBarCss.Failure, duration);\n }\n\n info(message: SnackbarErrorMessage | string, duration = 10000) {\n this.openNotification(message, SnackBarCss.Info, duration);\n }\n\n warning(message: SnackbarErrorMessage | string, duration = 10000, closable = true) {\n this.openNotification(message, SnackBarCss.Warning, duration, closable);\n }\n\n private openNotification(message: string, cssClass: SnackBarCss, duration: number, closable = true) {\n this.snackBarRef = this.snackBar.openFromComponent(CustomizedSnackbarComponent, {\n data: message,\n duration: duration,\n panelClass: [`customized-notification`, this.positionCss, cssClass, !closable ? 'not-closable' : 'closable'],\n horizontalPosition: 'left',\n });\n }\n\n dismiss() {\n this.snackBar.dismiss();\n }\n}\n","
    \n \n \n
    \n \n\n \n\n
    \n \n \n \n
    \n\n \n \n \n\n \n
    \n \n \n
    \n \n
    \n\n \n
    \n \n
    \n
    \n\n \n\n\n\n \n
    \n {{ control?.value || '' | date: displayMask }}\n
    \n
    \n
    \n\n\n \n
    {{ attrPlaceholder }}
    \n
    \n
    \n\n\n
    \n \n
    \n
    \n\n\n
    \n {{ label }}\n
    \n
    \n","import { DatePipe } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n LOCALE_ID,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n UntypedFormControl,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport {\n DateRange,\n DefaultMatCalendarRangeStrategy,\n MAT_DATE_RANGE_SELECTION_STRATEGY,\n MatCalendar,\n MatCalendarCellCssClasses,\n} from '@angular/material/datepicker';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport * as moment from 'moment';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { CalendarHeaderComponent } from '@app/modules/ui-components/components/calendar-header/calendar-header.component';\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\n\nimport { SnackbarService } from '../customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-date-dropdown',\n templateUrl: './date-dropdown.component.html',\n styleUrls: ['./date-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: DefaultMatCalendarRangeStrategy,\n },\n ],\n})\nexport class DateDropdownComponent\n extends CustomControlAbstract\n implements OnInit, OnDestroy, ControlValueAccessor, AfterViewInit\n{\n maskControl = new UntypedFormControl('');\n invalid = false;\n isDisabled = false;\n errors: ValidationErrors;\n dateRangeConfig: DateRange;\n header = CalendarHeaderComponent;\n isOpened = false;\n\n @ViewChild(MatCalendar) calendar: MatCalendar;\n\n @Input() label = '';\n @Input() labelTooltip: string;\n @Input() labelRequired: boolean;\n @Input() labelInside = false;\n private readonly labelInsideDefaultCss = 'nowrap pre-title';\n private readonly labelOutsideDefaultCss = 'nowrap body-small-bold';\n _labelCss = '';\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n return this.labelInside ? this.labelInsideDefaultCss : this.labelOutsideDefaultCss;\n }\n\n @Input() attrPlaceholder = '';\n @Input() buttonCss = 'date-dropdown-button';\n @Input() containerCss = 'display-flex align-items-center';\n @Input() valueCss = 'body-small text-color dark';\n @Input() placeholderCss = 'placeholder';\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() displayMask = 'MM/dd/yyyy';\n @Input() attrClickableDisable = false;\n @Input() max: Date;\n @Input() min: Date;\n @Input() clearable = false;\n @Input() editable = false;\n @Input() errorDisabledText: string;\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable({ emitEvent: false });\n } else {\n this.control.enable({ emitEvent: false });\n }\n this.isDisabled = attrDisable;\n this.cdr.markForCheck();\n }\n\n @Output() disabledClickEvent = new EventEmitter();\n @Output() selectedRangeEvent: EventEmitter = new EventEmitter();\n\n @ViewChild('dateMenuTrigger') dateMenuTrigger: MatMenuTrigger;\n\n private readonly today = this.timezoneService.getCurrentDateOnly();\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective,\n private timezoneService: TimezoneService,\n private snackbarService: SnackbarService,\n @Inject(LOCALE_ID) private locale: string\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as UntypedFormControl;\n this.attrDisable = this.isDisabled;\n\n if (typeof this.labelRequired === 'undefined') {\n this.labelRequired = this.control.hasValidator(Validators.required);\n }\n }\n\n this.control.statusChanges.pipe(untilDestroyed(this)).subscribe(status => this.checkControlStatus(status));\n this.listenControlTouched(this.control)\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.cdr.markForCheck();\n });\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n }\n\n ngAfterViewInit() {\n if (this.control.value) {\n this.calendar.activeDate = this.control.value;\n this.dateRangeConfig = new DateRange(this.control.value, this.control.value);\n this.cdr.markForCheck();\n }\n this.control.valueChanges.pipe(untilDestroyed(this), distinctUntilChanged()).subscribe(value => {\n if (this.attrClickableDisable && this.isOpened) {\n this.disabledClickEvent.emit();\n this.dateMenuTrigger.closeMenu();\n } else {\n this.dateMenuTrigger.closeMenu();\n this.onTouched();\n }\n this.cdr.markForCheck();\n });\n }\n\n valueTyped(value: string) {\n if (value) {\n const split = value.split('/');\n if (split[2] && split[2].length === 2) {\n split[2] = '20' + split[2];\n }\n const preparedValue = split.join('/');\n const dt = moment(preparedValue, 'MM/DD/YYYY');\n if (dt.isValid()) {\n this.setValue(dt.toDate());\n } else {\n this.setValue(null);\n this.snackbarService.error(`Invalid date: ${value}`);\n }\n } else {\n this.setValue(null);\n }\n }\n\n updateCursor(input: HTMLInputElement) {\n setTimeout(() => {\n input.selectionStart = input.value.length ?? 0;\n });\n }\n\n clickEvent($event: MouseEvent) {\n if (!this.isDisabled) return;\n\n this.disabledClickEvent.emit($event);\n }\n\n ngOnDestroy(): void {}\n\n dateClass() {\n return (date: Date): MatCalendarCellCssClasses => {\n if (date.getTime() === this.today.getTime()) {\n return 'special-date-today';\n }\n return;\n };\n }\n\n onSelect(date: Date) {\n if (this.dateRangeConfig?.start && date > this.dateRangeConfig.start && !this.dateRangeConfig.end) {\n this.dateRangeConfig = new DateRange(this.dateRangeConfig.start, date);\n } else {\n this.dateRangeConfig = new DateRange(date, null);\n }\n }\n\n onSelectSingleDate(date: Date) {\n this.dateRangeConfig = new DateRange(date, date);\n this.setValue(date);\n }\n\n selectRange() {\n if (this.control.value) {\n this.selectedRangeEvent.emit(this.control.value);\n }\n this.cdr.detectChanges();\n }\n\n writeValue(value: Date): void {\n this.maskControl.setValue(value ? new DatePipe(this.locale).transform(value, this.displayMask) : '');\n if (value) {\n this.dateRangeConfig = new DateRange(value, value);\n if (this.calendar) {\n this.calendar.activeDate = value;\n }\n }\n }\n\n setValue(date: Date) {\n if (this.ngControl.control.disabled) {\n return;\n }\n this.writeValue(date);\n if (this.control.value?.getTime() !== date?.getTime()) {\n this.onChanged(date);\n this.onTouched();\n }\n }\n\n dateToggleMenu(menuExpanded: boolean) {\n if (menuExpanded) {\n this.isOpened = true;\n }\n super.toggleMenu(menuExpanded);\n }\n\n openDateMenu(event: MouseEvent) {\n event.preventDefault();\n if (this.errorDisabledText) {\n this.snackbarService.error(this.errorDisabledText);\n return;\n }\n setTimeout(() => {\n this.dateMenuTrigger.openMenu();\n }, 1);\n }\n\n clear(event) {\n event.stopPropagation();\n this.onSelectSingleDate(null);\n this.cdr.markForCheck();\n }\n}\n","\n
    \n \n {{ text }}\n \n
    \n
    \n\n\n \n\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-divider',\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DividerComponent implements OnInit {\n @Input() text: string;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","import { Injectable } from '@angular/core';\nimport { isNil } from 'lodash';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { ISvgCircle, ISvgPath, ISvgRectangle } from '@shared/interfaces/svg-params.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconService {\n private static uniqueSvgIconId = -1;\n uniqueId = '';\n\n constructor() {}\n\n getIconTemplate(icon: EIcon, width = 15, height = 15, color: EColorPalette, secondColor: EColorPalette): string {\n this.uniqueId = String(++IconService.uniqueSvgIconId);\n switch (icon) {\n case EIcon.ANGLE_DOWN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 8')}\n ${this.getPath({\n d: 'M12.2929 0.292892C12.6834 -0.0976324 13.3166 -0.0976324 13.7071 0.292892C14.0976 0.683416 14.0976 1.31658 13.7071 1.70711L7.70711 7.70711C7.32853 8.08568 6.71894 8.09893 6.32428 7.73715L0.324275 2.23715C-0.0828438 1.86396 -0.110347 1.23139 0.262846 0.824274C0.636039 0.417155 1.26861 0.389652 1.67572 0.762845L6.96992 5.61586L12.2929 0.292892Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ANGLE_UP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 8')}\n ${this.getPath({\n d: 'M1.70711 7.70711C1.31658 8.09763 0.683417 8.09763 0.292893 7.70711C-0.0976317 7.31658 -0.0976317 6.68342 0.292893 6.29289L6.29289 0.292895C6.67147 -0.0856838 7.28106 -0.0989294 7.67572 0.262848L13.6757 5.76285C14.0828 6.13604 14.1103 6.76861 13.7372 7.17573C13.364 7.58285 12.7314 7.61035 12.3243 7.23716L7.03008 2.38414L1.70711 7.70711Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ANGLE_LEFT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 9 14')}\n ${this.getPath({\n d: 'M8.20711 1.70711C8.59763 1.31658 8.59763 0.683418 8.20711 0.292893C7.81658 -0.0976311 7.18342 -0.0976311 6.79289 0.292893L0.792895 6.29289C0.414316 6.67147 0.40107 7.28106 0.762847 7.67572L6.26285 13.6757C6.63604 14.0828 7.26861 14.1103 7.67573 13.7372C8.08284 13.364 8.11035 12.7314 7.73716 12.3243L2.88414 7.03008L8.20711 1.70711Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ANGLE_RIGHT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 9 14')}\n ${this.getPath({\n d: 'M0.792892 1.70711C0.402368 1.31658 0.402368 0.683418 0.792892 0.292893C1.18342 -0.0976311 1.81658 -0.0976311 2.20711 0.292893L8.20711 6.29289C8.58568 6.67147 8.59893 7.28106 8.23715 7.67572L2.73715 13.6757C2.36396 14.0828 1.73139 14.1103 1.32427 13.7372C0.917155 13.364 0.889652 12.7314 1.26284 12.3243L6.11586 7.03008L0.792892 1.70711Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BOARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2 2.94737C2 2.42415 2.42415 2 2.94737 2V2H21.0526V2C21.5758 2 22 2.42417 22 2.9474V3C22 3.55228 21.5523 4 21 4V4V17C21 17.5523 20.5523 18 20 18H16L18 22L16 21.9975L14 18H10L8 22H6L8 18H3.99625C3.44543 18 2.99833 17.5546 2.99625 17.0038L2.94737 4V4C2.42415 4 2 3.57585 2 3.05263V2.94737ZM5 4H19V16H5V4Z',\n fill: color || EColorPalette.cGray,\n opacity: 0.3,\n })}\n ${this.getRectangle({ x: 7, y: 6, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getRectangle({ x: 7, y: 11, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getRectangle({ x: 13, y: 6, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getRectangle({ x: 13, y: 11, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.WARNING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getRectangle({ x: 11, y: 7, width: 2, height: 8, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getRectangle({ x: 11, y: 16, width: 2, height: 2, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.WARNING2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 25')}\n ${this.getPath({\n d: 'M13.3944 4.96361C12.995 4.30995 12.039 4.32977 11.667 4.99942L3.32536 20.0144C2.95506 20.6809 3.43703 21.5 4.19951 21.5H21.7169C22.4979 21.5 22.9774 20.6449 22.5702 19.9785L13.3944 4.96361Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getRectangle({ x: 11.5, y: 9.5, width: 2, height: 7, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getRectangle({ x: 11.5, y: 17.5, width: 2, height: 2, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HOME_HEART: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M6.10038 12.6225L17.6952 5.72247C17.9373 5.57852 18.2155 5.50235 18.4992 5.50235C18.7829 5.50235 19.0611 5.57852 19.3032 5.72247L30.8981 12.6225C31.3491 12.8904 31.7219 13.2665 31.9805 13.7149C32.2391 14.1633 32.375 14.6688 32.375 15.183V28.5C32.375 29.2956 32.0501 30.0587 31.4719 30.6213C30.8937 31.1839 30.1094 31.5 29.2917 31.5H7.70833C6.89058 31.5 6.10632 31.1839 5.52809 30.6213C4.94985 30.0587 4.625 29.2956 4.625 28.5V15.183C4.62487 14.669 4.76048 14.1635 5.01883 13.7152C5.27718 13.2668 5.6496 12.8905 6.10038 12.6225Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M18.5 28C22.5068 28 25.7549 24.7439 25.7549 20.7273C25.7549 16.7107 22.5068 13.4545 18.5 13.4545C14.4932 13.4545 11.2451 16.7107 11.2451 20.7273C11.2451 24.7439 14.4932 28 18.5 28Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M19.2257 17.0891C19.2257 16.6885 18.9008 16.3636 18.5002 16.3636C18.0995 16.3636 17.7747 16.6885 17.7747 17.0891V20H14.8745C14.4728 20 14.1472 20.3256 14.1472 20.7273C14.1472 21.1289 14.4728 21.4546 14.8745 21.4546H17.7747V24.3654C17.7747 24.7661 18.0995 25.0909 18.5002 25.0909C18.9008 25.0909 19.2257 24.7661 19.2257 24.3654V21.4546H22.1258C22.5275 21.4546 22.8531 21.1289 22.8531 20.7273C22.8531 20.3256 22.5275 20 22.1258 20H19.2257V17.0891Z',\n fill: color || EColorPalette.cRed,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_DOWN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 22 22')}\n ${this.getRectangle({\n x: 10.0833,\n y: 4.58334,\n width: 1.83333,\n height: 12.8333,\n rx: 0.916667,\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M6.1481 10.3518C5.79012 9.99384 5.20972 9.99384 4.85174 10.3518C4.49376 10.7098 4.49376 11.2902 4.85174 11.6482L10.3517 17.1482C10.6988 17.4952 11.2576 17.5074 11.6193 17.1757L17.1193 12.1341C17.4925 11.792 17.5177 11.2121 17.1756 10.8389C16.8336 10.4657 16.2537 10.4405 15.8805 10.7826L11.0275 15.2312L6.1481 10.3518Z',\n fill: color || EColorPalette.cRed,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_UP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 22 22')}\n ${this.getRectangle({\n x: 10.0833,\n y: 9.16666,\n width: 1.83333,\n height: 9.16667,\n rx: 0.916667,\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M6.1481 11.6482C5.79012 12.0062 5.20972 12.0062 4.85174 11.6482C4.49376 11.2902 4.49376 10.7098 4.85174 10.3518L10.3517 4.85181C10.6988 4.50478 11.2576 4.49264 11.6193 4.82427L17.1193 9.86594C17.4925 10.208 17.5177 10.7879 17.1756 11.1611C16.8336 11.5343 16.2537 11.5595 15.8805 11.2174L11.0275 6.76879L6.1481 11.6482Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_LEFT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getRectangle({\n x: 0,\n y: 0,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'matrix(0 -1 -1 0 19 13)',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M12.7071 17.2929C13.0976 17.6834 13.0976 18.3166 12.7071 18.7071C12.3166 19.0976 11.6834 19.0976 11.2929 18.7071L5.29289 12.7071C4.91432 12.3285 4.90107 11.7189 5.26285 11.3243L10.7628 5.32428C11.136 4.91716 11.7686 4.88965 12.1757 5.26285C12.5828 5.63604 12.6103 6.26861 12.2372 6.67572L7.38414 11.9699L12.7071 17.2929Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.WAITING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M16.1875 3.75C16.1875 2.92157 16.8591 2.25 17.6875 2.25H19.3125C20.1409 2.25 20.8125 2.92157 20.8125 3.75V7.5C20.8125 8.32843 20.1409 9 19.3125 9H17.6875C16.8591 9 16.1875 8.32843 16.1875 7.5V3.75ZM24.2001 9.35195C23.6063 9.92966 23.6063 10.8663 24.2001 11.444L25.3203 12.5339C25.914 13.1116 26.8767 13.1116 27.4705 12.5339L30.2258 9.85303C30.8196 9.27532 30.8196 8.33867 30.2258 7.76096L29.1056 6.67105C28.5119 6.09334 27.5492 6.09334 26.9555 6.67105L24.2001 9.35195ZM29.25 15.75C28.4216 15.75 27.75 16.4216 27.75 17.25V18.75C27.75 19.5784 28.4216 20.25 29.25 20.25H33.1875C34.0159 20.25 34.6875 19.5784 34.6875 18.75V17.25C34.6875 16.4216 34.0159 15.75 33.1875 15.75H29.25ZM24.2001 24.636C23.6063 25.2137 23.6063 26.1503 24.2001 26.728L26.9555 29.4089C27.5492 29.9866 28.5119 29.9866 29.1056 29.4089L30.2258 28.319C30.8196 27.7413 30.8196 26.8047 30.2258 26.2269L27.4705 23.546C26.8767 22.9683 25.914 22.9683 25.3203 23.546L24.2001 24.636ZM3.8125 15.75C2.98407 15.75 2.3125 16.4216 2.3125 17.25V18.75C2.3125 19.5784 2.98407 20.25 3.8125 20.25H7.75C8.57843 20.25 9.25 19.5784 9.25 18.75V17.25C9.25 16.4216 8.57843 15.75 7.75 15.75H3.8125ZM17.6875 27C16.8591 27 16.1875 27.6716 16.1875 28.5V32.25C16.1875 33.0784 16.8591 33.75 17.6875 33.75H19.3125C20.1409 33.75 20.8125 33.0784 20.8125 32.25V28.5C20.8125 27.6716 20.1409 27 19.3125 27H17.6875ZM6.85634 9.85302C6.26258 9.27531 6.26258 8.33866 6.85634 7.76096L7.97653 6.67104C8.57029 6.09333 9.53295 6.09333 10.1267 6.67104L12.8821 9.35195C13.4758 9.92965 13.4758 10.8663 12.8821 11.444L11.7619 12.5339C11.1681 13.1116 10.2055 13.1116 9.61171 12.5339L6.85634 9.85302ZM6.85634 28.319C6.26258 27.7413 6.26258 26.8047 6.85634 26.2269L9.61171 23.546C10.2055 22.9683 11.1681 22.9683 11.7619 23.546L12.8821 24.636C13.4758 25.2137 13.4758 26.1503 12.8821 26.728L10.1267 29.4089C9.53295 29.9866 8.57028 29.9866 7.97653 29.4089L6.85634 28.319Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.FILE_PLUS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M9.02984 3H21.486C21.8338 3 22.1707 3.12082 22.4392 3.34179L30.2866 9.79998C30.6328 10.0849 30.8334 10.5098 30.8334 10.9582V30.125C30.8334 32.8108 30.8019 33 27.9703 33H9.02984C6.19827 33 6.16675 32.8108 6.16675 30.125V5.875C6.16675 3.18919 6.19827 3 9.02984 3Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M16.9584 21L13.8751 21C13.0236 21 12.3334 20.3284 12.3334 19.5C12.3334 18.6716 13.0236 18 13.8751 18L16.9584 18L16.9584 15C16.9584 14.1716 17.6486 13.5 18.5001 13.5C19.3515 13.5 20.0417 14.1716 20.0417 15L20.0417 18L23.1251 18C23.9765 18 24.6667 18.6716 24.6667 19.5C24.6667 20.3284 23.9765 21 23.1251 21L20.0417 21L20.0417 24C20.0417 24.8284 19.3515 25.5 18.5001 25.5C17.6486 25.5 16.9584 24.8284 16.9584 24L16.9584 21Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HOME: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M6.10038 12.6225L17.6952 5.72247C17.9373 5.57852 18.2155 5.50235 18.4992 5.50235C18.7829 5.50235 19.0611 5.57852 19.3032 5.72247L30.8981 12.6225C31.3491 12.8904 31.7219 13.2665 31.9805 13.7149C32.2391 14.1633 32.375 14.6688 32.375 15.183V28.5C32.375 29.2956 32.0501 30.0587 31.4719 30.6213C30.8937 31.1839 30.1094 31.5 29.2917 31.5H7.70833C6.89058 31.5 6.10632 31.1839 5.52809 30.6213C4.94985 30.0587 4.625 29.2956 4.625 28.5V15.183C4.62487 14.669 4.76048 14.1635 5.01883 13.7152C5.27718 13.2668 5.6496 12.8905 6.10038 12.6225ZM15.4167 19.5C15.0078 19.5 14.6157 19.658 14.3265 19.9393C14.0374 20.2206 13.875 20.6021 13.875 21V25.5C13.875 25.8978 14.0374 26.2793 14.3265 26.5606C14.6157 26.8419 15.0078 27 15.4167 27H21.5833C21.9922 27 22.3843 26.8419 22.6735 26.5606C22.9626 26.2793 23.125 25.8978 23.125 25.5V21C23.125 20.6021 22.9626 20.2206 22.6735 19.9393C22.3843 19.658 21.9922 19.5 21.5833 19.5H15.4167Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SAD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 130 130')}\n ${this.getRectangle({\n x: 10.8335,\n y: 10.8333,\n width: 108.333,\n height: 108.333,\n rx: 54.1667,\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M33.4103 89.0781C31.7509 91.5672 32.4235 94.9303 34.9126 96.5897C37.4017 98.2491 40.7648 97.5765 42.4242 95.0874C48.6915 85.6865 56.0865 81.2494 65.0006 81.2494C73.9146 81.2494 81.3097 85.6865 87.577 95.0874C89.2364 97.5765 92.5994 98.2491 95.0885 96.5897C97.5776 94.9303 98.2503 91.5672 96.5908 89.0781C88.4137 76.8124 77.7532 70.4161 65.0006 70.4161C52.2479 70.4161 41.5875 76.8124 33.4103 89.0781Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPIRATIONS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getUrlClip()}\n ${this.getPath({\n d: 'M31.2188 15.75H5.78118C5.14307 15.75 4.625 16.1922 4.625 16.7368V28.5395C4.625 30.1717 6.18132 31.5 8.09375 31.5H28.9062C30.8187 31.5 32.375 30.1717 32.375 28.5395V16.7368C32.375 16.1922 31.8569 15.75 31.2188 15.75Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M28.9062 7.875H8.09375C6.17793 7.875 4.625 9.38596 4.625 11.25V14.6699H32.375V11.25C32.375 9.38596 30.8221 7.875 28.9062 7.875Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.5626 4.5H10.4064C9.76807 4.5 9.25 5.00407 9.25 5.62493V10.1251C9.25 10.7459 9.76807 11.25 10.4064 11.25H11.5626C12.2009 11.25 12.7188 10.7459 12.7188 10.1251V5.62493C12.7188 5.00407 12.2009 4.5 11.5626 4.5Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getPath({\n d: 'M26.5936 4.5H25.4374C24.7991 4.5 24.2812 5.00407 24.2812 5.62493V10.1251C24.2812 10.7459 24.7991 11.25 25.4374 11.25H26.5936C27.2319 11.25 27.75 10.7459 27.75 10.1251V5.62493C27.75 5.00407 27.2319 4.5 26.5936 4.5Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getEndUrlClip()}\n ${this.getSvgEndTemplate()}\n ${this.getDefsPart()}\n ${this.getClipPath()}\n ${this.getClipPathRect()}\n ${this.endClipPath()}\n ${this.endDefsPart()}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SIGN_OUT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M21.5846 10.5C21.5846 11.3284 22.2745 12 23.1255 12C23.9766 12 24.6665 11.3284 24.6665 10.5V9C24.6665 5.68629 21.9068 3 18.5026 3H9.25791C5.85363 3 3.09391 5.68629 3.09391 9V27C3.09391 30.3137 5.85363 33 9.25791 33H18.5133C21.9175 33 24.6772 30.3137 24.6772 27V25.5C24.6772 24.6716 23.9873 24 23.1362 24C22.2852 24 21.5953 24.6716 21.5953 25.5V27C21.5953 28.6569 20.2154 30 18.5133 30H9.25791C7.55577 30 6.17591 28.6569 6.17591 27V9C6.17591 7.34315 7.55577 6 9.25791 6H18.5026C20.2047 6 21.5846 7.34315 21.5846 9V10.5Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n x: 30.8335,\n y: 16.5,\n width: 3,\n height: 18.5,\n rx: 1,\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n transform: 'rotate(90 30.8335 16.5)',\n })},\n ${this.getPath({\n d: 'M26.66 14.5607C26.058 13.9749 26.058 13.0251 26.66 12.4393C27.2621 11.8536 28.2382 11.8536 28.8403 12.4393L33.4653 16.9393C34.0673 17.5251 34.0673 18.4749 33.4653 19.0607L28.8403 23.5607C28.2382 24.1464 27.2621 24.1464 26.66 23.5607C26.058 22.9749 26.058 22.0251 26.66 21.4393L30.1949 18L26.66 14.5607Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.FORWARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M13 9.99997V5.6701C13 5.02297 13.7646 4.67961 14.2483 5.10955L21.4055 11.4715C21.728 11.7582 21.7427 12.2573 21.4375 12.5624L14.2803 19.7196C13.8078 20.1921 13 19.8575 13 19.1893V15C11.2455 14.8943 6.13692 14.9653 4.50643 14.9914C4.22674 14.9959 3.99999 14.7705 3.99999 14.4907V10.505C3.99999 10.2269 4.2243 10.0022 4.5024 10.0047C6.29384 10.021 12.2993 10.0698 13 9.99997Z',\n fill: color || EColorPalette.cGray3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.GREEN_FLAG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M2.04175 1.75H2.91675V11.375C2.91675 11.6071 2.82456 11.8296 2.66047 11.9937C2.49637 12.1578 2.27381 12.25 2.04175 12.25C1.80968 12.25 1.58712 12.1578 1.42303 11.9937C1.25894 11.8296 1.16675 11.6071 1.16675 11.375V2.625C1.16675 2.39294 1.25894 2.17038 1.42303 2.00628C1.58712 1.84219 1.80968 1.75 2.04175 1.75Z',\n fill: color || EColorPalette.cGreen2,\n })}\n ${this.getPath({\n d: 'M4.08325 1.75H11.5237C11.6365 1.7498 11.747 1.78235 11.8417 1.84368C11.9365 1.90502 12.0114 1.99251 12.0574 2.09556C12.1034 2.19861 12.1185 2.31279 12.1009 2.42426C12.0833 2.53573 12.0337 2.63971 11.9583 2.72358L10.2083 4.66667L11.9583 6.60975C12.0337 6.69363 12.0833 6.7976 12.1009 6.90907C12.1185 7.02054 12.1034 7.13472 12.0574 7.23777C12.0114 7.34082 11.9365 7.42832 11.8417 7.48965C11.747 7.55099 11.6365 7.58353 11.5237 7.58333H4.08325V1.75Z',\n fill: color || EColorPalette.cGreen2,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DESIGN_PIN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 48 48')}\n ${this.getPath({\n d: 'M23.3471 16.6617L29.9987 12.1998L28.2427 10.4438C27.4617 9.66276 27.4617 8.39643 28.2427 7.61539L31.0712 4.78696C31.8522 4.00591 33.1185 4.00591 33.8996 4.78696L45.2133 16.1007C45.9944 16.8817 45.9944 18.148 45.2133 18.9291L42.3849 21.7575C41.6038 22.5386 40.3375 22.5386 39.5564 21.7575L37.8006 20.0016L33.3386 26.6533C33.8529 28.5048 33.9971 30.4642 33.733 32.4187L32.869 38.8118C32.7211 39.9064 31.7138 40.6739 30.6192 40.5259C30.1852 40.4673 29.7825 40.2678 29.4728 39.9582L10.0421 20.5274C9.26104 19.7464 9.26104 18.4801 10.0421 17.699C10.3517 17.3893 10.7545 17.1899 11.1885 17.1312L17.5816 16.2673C19.5361 16.0032 21.4955 16.1473 23.3471 16.6617V16.6617Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M17.636 28.1211L9.55477 36.2023L8.4436 41.5561L13.7974 40.445L21.8786 32.3637L17.636 28.1211Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.YELLOW_FLAG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M2.04175 1.75H2.91675V11.375C2.91675 11.6071 2.82456 11.8296 2.66047 11.9937C2.49637 12.1578 2.27381 12.25 2.04175 12.25C1.80968 12.25 1.58712 12.1578 1.42303 11.9937C1.25894 11.8296 1.16675 11.6071 1.16675 11.375V2.625C1.16675 2.39294 1.25894 2.17038 1.42303 2.00628C1.58712 1.84219 1.80968 1.75 2.04175 1.75Z',\n fill: color || EColorPalette.cYellow,\n })}\n ${this.getPath({\n d: 'M4.08325 1.75H11.5237C11.6365 1.7498 11.747 1.78235 11.8417 1.84368C11.9365 1.90502 12.0114 1.99251 12.0574 2.09556C12.1034 2.19861 12.1185 2.31279 12.1009 2.42426C12.0833 2.53573 12.0337 2.63971 11.9583 2.72358L10.2083 4.66667L11.9583 6.60975C12.0337 6.69363 12.0833 6.7976 12.1009 6.90907C12.1185 7.02054 12.1034 7.13472 12.0574 7.23777C12.0114 7.34082 11.9365 7.42832 11.8417 7.48965C11.747 7.55099 11.6365 7.58353 11.5237 7.58333H4.08325V1.75Z',\n fill: color || EColorPalette.cYellow,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.RED_FLAG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M2.04175 1.75H2.91675V11.375C2.91675 11.6071 2.82456 11.8296 2.66047 11.9937C2.49637 12.1578 2.27381 12.25 2.04175 12.25C1.80968 12.25 1.58712 12.1578 1.42303 11.9937C1.25894 11.8296 1.16675 11.6071 1.16675 11.375V2.625C1.16675 2.39294 1.25894 2.17038 1.42303 2.00628C1.58712 1.84219 1.80968 1.75 2.04175 1.75Z',\n fill: color || EColorPalette.cRed,\n })}\n ${this.getPath({\n d: 'M4.08325 1.75H11.5237C11.6365 1.7498 11.747 1.78235 11.8417 1.84368C11.9365 1.90502 12.0114 1.99251 12.0574 2.09556C12.1034 2.19861 12.1185 2.31279 12.1009 2.42426C12.0833 2.53573 12.0337 2.63971 11.9583 2.72358L10.2083 4.66667L11.9583 6.60975C12.0337 6.69363 12.0833 6.7976 12.1009 6.90907C12.1185 7.02054 12.1034 7.13472 12.0574 7.23777C12.0114 7.34082 11.9365 7.42832 11.8417 7.48965C11.747 7.55099 11.6365 7.58353 11.5237 7.58333H4.08325V1.75Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.REPEAT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M12.8395 9.38404C12.5096 9.62892 12.0415 9.39342 12.0415 8.98255V8H8.0415C5.83236 8 4.0415 9.79086 4.0415 12V13C4.0415 14.6569 5.38465 16 7.0415 16V18C4.28008 18 2.0415 15.7614 2.0415 13V12C2.0415 8.68629 4.7278 6 8.0415 6H12.0415V4.728C12.0415 4.31643 12.511 4.08112 12.8407 4.3274L15.6977 6.46137C15.966 6.66171 15.9654 7.06392 15.6965 7.26345L12.8395 9.38404Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M17.0414 6V8C18.6982 8 20.0414 9.34315 20.0414 11V12C20.0414 14.2091 18.2505 16 16.0414 16H12.0997V14.728C12.0997 14.3164 11.6302 14.0811 11.3005 14.3274L8.44347 16.4614C8.17524 16.6617 8.17585 17.0639 8.44468 17.2635L11.3017 19.384C11.6316 19.6289 12.0997 19.3934 12.0997 18.9825V18H16.0414C19.3551 18 22.0414 15.3137 22.0414 12V11C22.0414 8.23858 19.8028 6 17.0414 6Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOLLAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 25')}\n ${this.getRectangle({\n x: 11.5,\n y: 2.44792,\n width: 2,\n height: 4,\n rx: 1,\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })},\n ${this.getRectangle({\n x: 11.5,\n y: 16.4479,\n width: 2,\n height: 4,\n rx: 1,\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M15.4929 8.49192C15.2142 8.13725 14.8501 7.85542 14.4004 7.64642C13.9507 7.43741 13.5169 7.33292 13.0989 7.33292C12.8836 7.33292 12.6651 7.35192 12.4434 7.38992C12.2217 7.42792 12.0222 7.50075 11.8449 7.60842C11.6676 7.71608 11.5187 7.85541 11.3984 8.02642C11.2781 8.19742 11.2179 8.41591 11.2179 8.68192C11.2179 8.90992 11.2654 9.09991 11.3604 9.25192C11.4554 9.40392 11.5947 9.53691 11.7784 9.65092C11.9621 9.76492 12.1806 9.86942 12.4339 9.96442C12.6872 10.0594 12.9722 10.1576 13.2889 10.2589C13.7449 10.4109 14.2199 10.5787 14.7139 10.7624C15.2079 10.9461 15.6576 11.1899 16.0629 11.4939C16.4682 11.7979 16.8039 12.1747 17.0699 12.6244C17.3359 13.0741 17.4689 13.6346 17.4689 14.3059C17.4689 15.0786 17.3264 15.7467 17.0414 16.3104C16.7564 16.8741 16.3732 17.3396 15.8919 17.7069C15.4106 18.0743 14.8596 18.3466 14.2389 18.5239C13.6182 18.7012 12.9786 18.7899 12.3199 18.7899C11.3572 18.7899 10.4262 18.6221 9.52691 18.2864C8.62757 17.9507 7.88025 17.4726 7.28491 16.8519L9.41291 14.6859C9.74225 15.0913 10.1761 15.4301 10.7144 15.7024C11.2527 15.9748 11.7879 16.1109 12.3199 16.1109C12.5606 16.1109 12.7949 16.0856 13.0229 16.0349C13.2509 15.9842 13.4504 15.9019 13.6214 15.7879C13.7924 15.6739 13.9286 15.5219 14.0299 15.3319C14.1312 15.1419 14.1819 14.9139 14.1819 14.6479C14.1819 14.3946 14.1186 14.1792 13.9919 14.0019C13.8652 13.8246 13.6847 13.6631 13.4504 13.5174C13.2161 13.3717 12.9247 13.2387 12.5764 13.1184C12.2281 12.9981 11.8322 12.8682 11.3889 12.7289C10.9582 12.5896 10.5371 12.4249 10.1254 12.2349C9.71374 12.0449 9.34641 11.8011 9.02341 11.5034C8.70041 11.2057 8.44075 10.8448 8.24441 10.4204C8.04808 9.99608 7.94991 9.47992 7.94991 8.87192C7.94991 8.12458 8.10191 7.48492 8.40591 6.95292C8.70991 6.42091 9.10891 5.98392 9.60291 5.64192C10.0969 5.29991 10.6542 5.04975 11.2749 4.89142C11.8956 4.73308 12.5226 4.65392 13.1559 4.65392C13.9159 4.65392 14.6917 4.79325 15.4834 5.07192C16.2751 5.35058 16.9686 5.76225 17.5639 6.30692L15.4929 8.49192Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.DONE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cGreen2,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M16.769 7.81769C17.1458 7.41393 17.7786 7.39211 18.1823 7.76895C18.5861 8.14578 18.6079 8.77857 18.2311 9.18232L11.2311 16.6823C10.8655 17.074 10.2561 17.108 9.84923 16.7593L6.34923 13.7593C5.9299 13.3998 5.88134 12.7685 6.24076 12.3492C6.60018 11.9299 7.23148 11.8813 7.65081 12.2407L10.423 14.6169L16.769 7.81769Z',\n fill: color || EColorPalette.cGreen2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DONE_WB: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M16.769 7.81769C17.1458 7.41393 17.7786 7.39211 18.1823 7.76895C18.5861 8.14578 18.6079 8.77857 18.2311 9.18232L11.2311 16.6823C10.8655 17.074 10.2561 17.108 9.84923 16.7593L6.34923 13.7593C5.9299 13.3998 5.88134 12.7685 6.24076 12.3492C6.60018 11.9299 7.23148 11.8813 7.65081 12.2407L10.423 14.6169L16.769 7.81769Z',\n fill: color || EColorPalette.cGreen2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.QUESTION: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cYellow,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M10.5909 13.209V14.868H11.8509C14.3919 14.868 16.3869 12.915 16.3869 10.395C16.3869 7.875 14.3919 5.922 11.8509 5.922C9.30994 5.922 7.33594 7.875 7.33594 10.395H9.12094C9.12094 8.799 10.2339 7.581 11.8509 7.581C13.4469 7.581 14.6019 8.799 14.6019 10.395C14.6019 11.991 13.4469 13.209 11.8509 13.209H10.5909ZM11.9999 16C11.4477 16 10.9999 16.4477 10.9999 17C10.9999 17.5523 11.4477 18 11.9999 18C12.5522 18 12.9999 17.5523 12.9999 17C12.9999 16.4477 12.5522 16 11.9999 16Z',\n fill: color || EColorPalette.cYellow,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.ERROR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M16.2782 7.79289C15.8877 7.40237 15.2545 7.40237 14.864 7.79289L12.0355 10.6213L9.20711 7.79289C8.81658 7.40237 8.18342 7.40237 7.79289 7.79289C7.40237 8.18342 7.40237 8.81658 7.79289 9.20711L10.6213 12.0355L7.79289 14.864C7.40237 15.2545 7.40237 15.8877 7.79289 16.2782C8.18342 16.6687 8.81658 16.6687 9.20711 16.2782L12.0355 13.4497L14.864 16.2782C15.2545 16.6687 15.8877 16.6687 16.2782 16.2782C16.6687 15.8877 16.6687 15.2545 16.2782 14.864L13.4497 12.0355L16.2782 9.20711C16.6687 8.81658 16.6687 8.18342 16.2782 7.79289Z',\n fill: color || EColorPalette.cRed,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.SEARCH: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M14.2929 16.7071C13.9024 16.3166 13.9024 15.6834 14.2929 15.2929C14.6834 14.9024 15.3166 14.9024 15.7071 15.2929L19.7071 19.2929C20.0976 19.6834 20.0976 20.3166 19.7071 20.7071C19.3166 21.0976 18.6834 21.0976 18.2929 20.7071L14.2929 16.7071Z',\n fill: color || EColorPalette.cGray,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M4 11C4 14.866 7.13401 18 11 18C14.866 18 18 14.866 18 11C18 7.13401 14.866 4 11 4C7.13401 4 4 7.13401 4 11ZM16 11C16 13.7614 13.7614 16 11 16C8.23858 16 6 13.7614 6 11C6 8.23858 8.23858 6 11 6C13.7614 6 16 8.23858 16 11Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TICK: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 11 8')}\n ${this.getPath({\n d: 'M10.1424 0.306021C10.5504 0.71405 10.5504 1.37559 10.1424 1.78362L4.23202 7.69398C3.82399 8.10201 3.16245 8.10201 2.75442 7.69398L2.01562 6.95518L8.6648 0.306021C9.07283 -0.102007 9.73437 -0.102007 10.1424 0.306021Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M0.306024 3.76769C0.714052 3.35966 1.37559 3.35966 1.78362 3.76769L4.97077 6.95484L4.23197 7.69364C3.82395 8.10167 3.16241 8.10167 2.75438 7.69364L0.306003 5.24527C-0.102005 4.83726 -0.102005 4.17572 0.306024 3.76769Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}`;\n }\n\n case EIcon.TIME_SCHEDULE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M10.4646 7.96165C10.4846 7.70115 10.7018 7.5 10.9631 7.5H11.0476C11.3044 7.5 11.5195 7.69465 11.5451 7.95025L12.0001 12.5L15.2481 14.356C15.4039 14.4451 15.5001 14.6107 15.5001 14.7902V14.8454C15.5001 15.1751 15.1866 15.4145 14.8685 15.3278L10.3987 14.1087C10.1673 14.0456 10.0134 13.8271 10.0318 13.588L10.4646 7.96165Z',\n fill: color || EColorPalette.cGray4,\n opacity: 1,\n })}\n ${this.getPath({\n d: 'M6.20102 1.41818C5.93691 1.10343 5.42697 1.2239 5.33164 1.62357L4.20314 6.3547C4.12546 6.68035 4.38353 6.98885 4.71778 6.96991L9.58475 6.6941C9.99566 6.67082 10.204 6.18879 9.93948 5.87351L8.74872 4.45442C9.62236 4.15588 10.5488 3.99995 11.5 3.99995C16.1944 3.99995 20 7.80553 20 12.5C20 17.1944 16.1944 21 11.5 21C6.80558 21 3 17.1944 3 12.5C3 11.7119 3.10672 10.94 3.31481 10.1982L1.38913 9.65801C1.13559 10.5619 1 11.5151 1 12.5C1 18.2989 5.70101 23 11.5 23C17.299 23 22 18.2989 22 12.5C22 6.70096 17.299 1.99995 11.5 1.99995C10.0413 1.99995 8.65217 2.29739 7.3898 2.83491L6.20102 1.41818Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.THUNDER_CIRCLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11 16.8229C11 17.6144 12.0669 17.8662 12.4208 17.1584L15.4573 11.0854C15.7066 10.5867 15.344 10 14.7865 10H12V7.17705C12 6.38563 10.9331 6.13377 10.5792 6.84164L7.54271 12.9146C7.29337 13.4133 7.65599 14 8.21353 14H11V16.8229Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SHIELD_USER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M4 4.00006L11.6314 2.56917C11.875 2.52349 12.125 2.52349 12.3686 2.56917L20 4.00006V11.9033C20 15.696 18.0462 19.2212 14.83 21.2313L12.53 22.6688C12.2057 22.8715 11.7943 22.8715 11.47 22.6688L9.17001 21.2313C5.95382 19.2212 4 15.696 4 11.9033L4 4.00006Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 11C10.8954 11 10 10.1046 10 9C10 7.89543 10.8954 7 12 7C13.1046 7 14 7.89543 14 9C14 10.1046 13.1046 11 12 11Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M7.00036 16.4995C7.2157 13.5166 9.36773 12 11.9907 12C14.6507 12 16.836 13.4332 16.9988 16.5C17.0053 16.6222 16.9988 17 16.5815 17C14.5228 17 11.4637 17 7.40417 17C7.26484 17 6.98863 16.662 7.00036 16.4995Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.PORTFOLIOS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2 19.5C2 20.3284 2.67157 21 3.5 21H20.5C21.3284 21 22 20.3284 22 19.5V8.5C22 7.67157 21.3284 7 20.5 7H10L7.43934 4.43934C7.15804 4.15804 6.7765 4 6.37868 4H3.5C2.67157 4 2 4.67157 2 5.5V19.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 6.76172,\n y: 14.127,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 6.76172 14.127)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 13.0479,\n y: 14.127,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 13.0479 14.127)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 9.9043,\n y: 17.2695,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 9.9043 17.2695)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 9.9043,\n y: 10.9844,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 9.9043 10.9844)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HALF_STAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M12 17.9999L16.0844 20.1472C16.279 20.2496 16.502 20.2849 16.7188 20.2477C17.2631 20.1544 17.6287 19.6374 17.5353 19.0931L16.7553 14.545L20.0596 11.3241C20.2171 11.1706 20.3196 10.9695 20.3512 10.7518C20.4306 10.2053 20.0519 9.69783 19.5054 9.61841L14.9389 8.95486L12.8967 4.81693C12.7994 4.61972 12.6398 4.46009 12.4426 4.36276C12.3 4.29242 12.1489 4.25916 12 4.25928V17.9999Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 4.25928C11.6316 4.25956 11.2774 4.46421 11.1033 4.81693L9.06111 8.95486L4.49463 9.61841C4.27699 9.65004 4.07585 9.75252 3.92234 9.91001C3.53684 10.3055 3.54493 10.9386 3.94042 11.3241L7.24475 14.545L6.4647 19.0931C6.42753 19.3098 6.46284 19.5328 6.56518 19.7274C6.82218 20.2163 7.42681 20.4042 7.91565 20.1472L12 17.9999V4.25928Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.PLUS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 4.5,\n y: 11,\n width: 16,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 13.5,\n y: 4,\n width: 16,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n transform: 'rotate(90 13.5 4)',\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.USER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7C16 9.20914 14.2091 11 12 11Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M3.00065 20.1992C3.38826 15.4265 7.26191 13 11.9833 13C16.7712 13 20.7049 15.2932 20.9979 20.2C21.0096 20.3955 20.9979 21 20.2467 21C16.5411 21 11.0347 21 3.7275 21C3.47671 21 2.97954 20.4592 3.00065 20.1992Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.USER_GROUP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 7C5 9.20914 6.79086 11 9 11C11.2091 11 13 9.20914 13 7C13 4.79086 11.2091 3 9 3C6.79086 3 5 4.79086 5 7ZM15 11C15 12.6569 16.3431 14 18 14C19.6569 14 21 12.6569 21 11C21 9.34315 19.6569 8 18 8C16.3431 8 15 9.34315 15 11Z',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8.98334 13C4.26191 13 0.388259 15.4265 0.000651684 20.1992C-0.0204618 20.4592 0.476712 21 0.727502 21H17.2467C17.9979 21 18.0096 20.3955 17.9979 20.2C17.7049 15.2932 13.7712 13 8.98334 13ZM23.4559 21H19.6C19.6 18.7491 18.8563 16.6718 17.6012 15.0006C21.0077 15.0379 23.7892 16.7601 23.9985 20.4C24.0069 20.5466 23.9985 21 23.4559 21Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DASHBOARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M3 4C2.44772 4 2 4.44772 2 5V7C2 7.55228 2.44771 8 3 8H20C20.5523 8 21 7.55228 21 7V5C21 4.44772 20.5523 4 20 4H3ZM10 10C9.44772 10 9 10.4477 9 11V19C9 19.5523 9.44771 20 10 20H20C20.5523 20 21 19.5523 21 19V11C21 10.4477 20.5523 10 20 10H10Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 2,\n y: 10,\n width: 5,\n height: 10,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DASHBOARD2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M9 5C9 4.44772 9.44772 4 10 4H21C21.5523 4 22 4.44772 22 5V7C22 7.55228 21.5523 8 21 8H10C9.44772 8 9 7.55228 9 7V5ZM9 11C9 10.4477 9.44772 10 10 10H21C21.5523 10 22 10.4477 22 11V13C22 13.5523 21.5523 14 21 14H10C9.44772 14 9 13.5523 9 13V11ZM10 16C9.44772 16 9 16.4477 9 17V19C9 19.5523 9.44772 20 10 20H21C21.5523 20 22 19.5523 22 19V17C22 16.4477 21.5523 16 21 16H10Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 2,\n y: 4,\n width: 5,\n height: 16,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.DASHBOARD3: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M3.5 4C2.94772 4 2.5 4.44772 2.5 5V7C2.5 7.55228 2.94771 8 3.5 8H20.5C21.0523 8 21.5 7.55228 21.5 7V5C21.5 4.44772 21.0523 4 20.5 4H3.5ZM3.5 10C2.94772 10 2.5 10.4477 2.5 11V19C2.5 19.5523 2.94772 20 3.5 20H13.5C14.0523 20 14.5 19.5523 14.5 19V11C14.5 10.4477 14.0523 10 13.5 10H3.5Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 16.5,\n y: 10,\n width: 5,\n height: 10,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.DASHBOARD4: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2.5 5C2.5 4.44772 2.94772 4 3.5 4H20.5C21.0523 4 21.5 4.44772 21.5 5V7C21.5 7.55228 21.0523 8 20.5 8H3.5C2.94771 8 2.5 7.55228 2.5 7V5ZM2.5 11C2.5 10.4477 2.94772 10 3.5 10H13.5C14.0523 10 14.5 10.4477 14.5 11V13C14.5 13.5523 14.0523 14 13.5 14H3.5C2.94772 14 2.5 13.5523 2.5 13V11ZM3.5 16C2.94772 16 2.5 16.4477 2.5 17V19C2.5 19.5523 2.94772 20 3.5 20H13.5C14.0523 20 14.5 19.5523 14.5 19V17C14.5 16.4477 14.0523 16 13.5 16H3.5Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 16.5,\n y: 10,\n width: 5,\n height: 10,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHAIR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6.54213 21.5015C6.39919 22.035 6.71578 22.5833 7.24924 22.7262C7.78271 22.8692 8.33104 22.5526 8.47399 22.0191L10.0721 16.0547C10.2151 15.5213 9.8985 14.9729 9.36504 14.83C8.83157 14.687 8.28323 15.0036 8.14029 15.5371L6.54213 21.5015ZM17.4493 21.4711C17.5922 22.0046 17.2756 22.5529 16.7422 22.6959C16.2087 22.8388 15.6604 22.5222 15.5174 21.9888L14.2145 17.1263C14.0716 16.5929 14.3882 16.0445 14.9216 15.9016C15.4551 15.7586 16.0034 16.0752 16.1464 16.6087L17.4493 21.4711Z',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8 1C6.89543 1 6 1.89543 6 3V12.5C6 12.7761 6.22386 13 6.5 13H17.5C17.7761 13 18 12.7761 18 12.5V3C18 1.89543 17.1046 1 16 1H8ZM5.5 14C4.67157 14 4 14.6716 4 15.5C4 16.3284 4.67157 17 5.5 17H18.5C19.3284 17 20 16.3284 20 15.5C20 14.6716 19.3284 14 18.5 14H5.5Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.LIBRARY: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 3C4.44772 3 4 3.44772 4 4V20C4 20.5523 4.44772 21 5 21H6C6.55228 21 7 20.5523 7 20V4C7 3.44772 6.55228 3 6 3H5ZM10 3C9.44772 3 9 3.44772 9 4V20C9 20.5523 9.44772 21 10 21H11C11.5523 21 12 20.5523 12 20V4C12 3.44772 11.5523 3 11 3H10Z',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n x: 13.4775,\n y: 3.92419,\n width: 3,\n height: 18,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.VISIBLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M3 12C3 12 5.45455 6 12 6C16.9091 6 21 12 21 12C21 12 16.9091 18 12 18C5.45455 18 3 12 3 12Z',\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 15C10.3431 15 9 13.6569 9 12C9 10.3431 10.3431 9 12 9C13.6569 9 15 10.3431 15 12C15 13.6569 13.6569 15 12 15Z',\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.FILE_DONE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M14.2364 2H6.35714C4.52045 2 4.5 2.12612 4.5 3.91667V20.0833C4.5 21.8739 4.52045 22 6.35714 22H18.6429C20.4796 22 20.5 21.8739 20.5 20.0833V7.5292C20.5 7.08788 20.3057 6.66895 19.9687 6.38394L15.2051 2.35474C14.9343 2.12568 14.5911 2 14.2364 2ZM10.7042 15.4625C10.8958 15.6542 11.1354 15.75 11.375 15.75C11.6146 15.75 11.8542 15.6542 12.0458 15.4625L15.8792 11.6292C16.2625 11.2458 16.2625 10.6708 15.8792 10.2875C15.4958 9.90417 14.9208 9.90417 14.5375 10.2875L11.375 13.45L10.1292 12.2042C9.79375 11.8208 9.17083 11.8208 8.7875 12.2042C8.40417 12.5875 8.40417 13.1625 8.7875 13.5458L10.7042 15.4625Z',\n fill: color || EColorPalette.cGray2,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.375 15.75C11.1354 15.75 10.8958 15.6542 10.7042 15.4625L8.7875 13.5458C8.40417 13.1625 8.40417 12.5875 8.7875 12.2042C9.17083 11.8208 9.79375 11.8208 10.1292 12.2042L11.375 13.45L14.5375 10.2875C14.9208 9.90417 15.4958 9.90417 15.8792 10.2875C16.2625 10.6708 16.2625 11.2458 15.8792 11.6292L12.0458 15.4625C11.8542 15.6542 11.6146 15.75 11.375 15.75Z',\n fill: secondColor || EColorPalette.cWhite,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TIMER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12.5 21.5C8.08172 21.5 4.5 17.9183 4.5 13.5C4.5 9.08172 8.08172 5.5 12.5 5.5C16.9183 5.5 20.5 9.08172 20.5 13.5C20.5 17.9183 16.9183 21.5 12.5 21.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M13.5 5.56189V4.5H14.5C15.0523 4.5 15.5 4.05228 15.5 3.5C15.5 2.94772 15.0523 2.5 14.5 2.5H10.5C9.94772 2.5 9.5 2.94772 9.5 3.5C9.5 4.05228 9.94772 4.5 10.5 4.5H11.5V5.56189C11.8276 5.52104 12.1613 5.5 12.5 5.5C12.8387 5.5 13.1724 5.52104 13.5 5.56189Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M18.6672 8.40402L19.4498 7.62141C19.8403 7.23089 19.8403 6.59772 19.4498 6.2072C19.0593 5.81668 18.4261 5.81668 18.0356 6.2072L17.21 7.03282C17.7511 7.4276 18.2408 7.88864 18.6672 8.40402Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M11.9646 8.46165C11.9846 8.20115 12.2018 8 12.4631 8H12.5371C12.7984 8 13.0156 8.20115 13.0356 8.46165L13.4587 13.9617C13.481 14.252 13.2514 14.5 12.9602 14.5H12.04C11.7488 14.5 11.5192 14.252 11.5415 13.9617L11.9646 8.46165Z',\n fill: color || EColorPalette.cGray4,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TOOLS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M15.9504 3.80746L13.0252 6.7326C12.2442 7.51365 12.2442 8.77998 13.0252 9.56103L14.4394 10.9752C15.2205 11.7563 16.4868 11.7563 17.2679 10.9752L20.193 8.0501C20.7347 10.0446 20.2302 12.2555 18.6752 13.8106C16.8459 15.6398 14.1092 16.0154 11.8846 14.9443L6.75796 20.0709C5.97692 20.852 4.71059 20.852 3.92954 20.0709C3.14849 19.2899 3.14849 18.0235 3.92954 17.2425L9.05617 12.1159C7.98507 9.89129 8.36066 7.15452 10.1899 5.32529C11.7449 3.77026 13.9558 3.26574 15.9504 3.80746Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getPath({\n d: 'M16.6571 5.92912L18.0713 7.34334C18.4618 7.73386 18.4618 8.36703 18.0713 8.75755L16.6916 10.1372C16.3011 10.5278 15.6679 10.5278 15.2774 10.1372L13.8632 8.72301C13.4727 8.33249 13.4727 7.69932 13.8632 7.3088L15.2429 5.92912C15.6334 5.5386 16.2666 5.5386 16.6571 5.92912Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARCHIVE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M5 3C4.17157 3 3.5 3.67157 3.5 4.5V19.5C3.5 20.3284 4.17157 21 5 21H20C20.8284 21 21.5 20.3284 21.5 19.5V4.5C21.5 3.67157 20.8284 3 20 3H5ZM8.5 5C7.94772 5 7.5 5.44772 7.5 6C7.5 6.55228 7.94772 7 8.5 7H16.5C17.0523 7 17.5 6.55228 17.5 6C17.5 5.44772 17.0523 5 16.5 5H8.5Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BINOCULAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12.8433 16H11.1563L10.985 16.6393C10.3351 19.0649 7.84182 20.5044 5.41617 19.8545C2.99052 19.2045 1.55103 16.7112 2.20098 14.2856L3.92068 7.86759C4.57064 5.44194 7.0639 4.00245 9.48955 4.6524C10.542 4.9344 11.4088 5.56341 11.9998 6.38334C12.5909 5.56341 13.4576 4.9344 14.5101 4.6524C16.9357 4.00245 19.429 5.44194 20.079 7.86759L21.7987 14.2856C22.4486 16.7112 21.0091 19.2045 18.5835 19.8545C16.1578 20.5044 13.6646 19.0649 13.0146 16.6393L12.8433 16ZM17.4562 18.1051C18.9629 18.1051 20.1843 16.8378 20.1843 15.2744C20.1843 13.7109 18.9629 12.4436 17.4562 12.4436C15.9494 12.4436 14.728 13.7109 14.728 15.2744C14.728 16.8378 15.9494 18.1051 17.4562 18.1051ZM6.54347 18.1051C8.0502 18.1051 9.27164 16.8378 9.27164 15.2744C9.27164 13.7109 8.0502 12.4436 6.54347 12.4436C5.03674 12.4436 3.81529 13.7109 3.81529 15.2744C3.81529 16.8378 5.03674 18.1051 6.54347 18.1051Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_FROM_LEFT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 7.5,\n y: 13,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'rotate(-90 7.5 13)',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n x: 3.5,\n y: 3,\n width: 2,\n height: 18,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M13.7929 17.2929C13.4024 17.6834 13.4024 18.3166 13.7929 18.7071C14.1834 19.0976 14.8166 19.0976 15.2071 18.7071L21.2071 12.7071C21.5857 12.3285 21.5989 11.7189 21.2372 11.3243L15.7372 5.32428C15.364 4.91716 14.7314 4.88965 14.3243 5.26285C13.9172 5.63604 13.8897 6.26861 14.2628 6.67572L19.1159 11.9699L13.7929 17.2929Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_FROM_RIGHT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n opacity: 0.3,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'matrix(0 -1 -1 0 17.5 13)',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 19.5,\n y: 3,\n width: 2,\n height: 18,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getPath({\n d: 'M11.2071 17.2929C11.5976 17.6834 11.5976 18.3166 11.2071 18.7071C10.8166 19.0976 10.1834 19.0976 9.79289 18.7071L3.79289 12.7071C3.41432 12.3285 3.40107 11.7189 3.76285 11.3243L9.26285 5.32428C9.63604 4.91716 10.2686 4.88965 10.6757 5.26285C11.0828 5.63604 11.1103 6.26861 10.7372 6.67572L5.88414 11.9699L11.2071 17.2929Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EDIT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M19.9254 6.31808C20.5111 6.90386 20.5111 7.85361 19.9254 8.4394L11.4769 16.8879C11.1919 17.1728 10.8044 17.3311 10.4015 17.3271L6.87812 17.2925C6.07011 17.2845 5.41361 16.638 5.39335 15.8302L5.30741 12.403C5.29711 11.9923 5.45575 11.5953 5.74628 11.3048L14.2685 2.78254C14.8543 2.19675 15.804 2.19675 16.3898 2.78254L19.9254 6.31808Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getRectangle({\n x: 5,\n y: 20,\n width: 15,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.PENCIL: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M20.4745 8.33237C21.0488 8.90667 21.0617 9.83374 20.5036 10.4238L10.9438 20.5307C10.6605 20.8303 10.2664 21 9.85405 21L5.49995 21C4.67153 21 3.99995 20.3284 3.99995 19.5L3.99995 15.1074C3.99995 14.7178 4.15155 14.3435 4.42266 14.0637L14.0817 4.09442C14.6646 3.49279 15.6273 3.48519 16.2196 4.07753L20.4745 8.33237Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CLOSE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n\n ${this.getRectangle({\n x: 6.13599,\n y: 16.9498,\n width: 16,\n height: 2,\n rx: 1,\n transform: 'rotate(-45 6.13599 16.9498)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 7.55029,\n y: 5.63605,\n width: 16,\n height: 2,\n rx: 1,\n transform: 'rotate(45 7.55029 5.63605)',\n fill: color || EColorPalette.cGray4,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.RADIO_DEFAULT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 17 17')}\n ${this.getCircle({\n cx: 8.1189,\n cy: 8.10181,\n r: 7,\n stroke: EColorPalette.cGray2,\n strokeWidth: 2,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.RADIO_SELECTED: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 17 17')}\n ${this.getCircle({\n cx: 8.1189,\n cy: 8.10181,\n r: 7,\n stroke: EColorPalette.cGreen,\n strokeWidth: 2,\n })}\n ${this.getCircle({\n cx: 8,\n cy: 8,\n r: 4,\n fill: EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BUILDING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 26')}\n ${this.getPath({\n d: 'M5 4C5 2.89543 5.89543 2 7 2H17C18.1046 2 19 2.89543 19 4V21H13.5V18C13.5 17.4477 13.0523 17 12.5 17H11.5C10.9477 17 10.5 17.4477 10.5 18V21H5V4ZM8 5C8 4.44772 8.44772 4 9 4H10C10.5523 4 11 4.44772 11 5V6C11 6.55228 10.5523 7 10 7H9C8.44772 7 8 6.55228 8 6V5ZM14 4C13.4477 4 13 4.44772 13 5V6C13 6.55228 13.4477 7 14 7H15C15.5523 7 16 6.55228 16 6V5C16 4.44772 15.5523 4 15 4H14ZM8 9C8 8.44772 8.44772 8 9 8H10C10.5523 8 11 8.44772 11 9V10C11 10.5523 10.5523 11 10 11H9C8.44772 11 8 10.5523 8 10V9ZM9 12C8.44772 12 8 12.4477 8 13V14C8 14.5523 8.44772 15 9 15H10C10.5523 15 11 14.5523 11 14V13C11 12.4477 10.5523 12 10 12H9ZM13 13C13 12.4477 13.4477 12 14 12H15C15.5523 12 16 12.4477 16 13V14C16 14.5523 15.5523 15 15 15H14C13.4477 15 13 14.5523 13 14V13Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getRectangle({\n x: 13,\n y: 8,\n width: 3,\n height: 3,\n rx: 1,\n fill: EColorPalette.cGray6,\n })}\n ${this.getPath({\n d: 'M3 22.9881C3 21.8901 3.89009 21 4.98807 21H19.0119C20.1099 21 21 21.8901 21 22.9881C21 22.9947 20.9947 23 20.9881 23H3.01193C3.00534 23 3 22.9947 3 22.9881Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MAIL: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.5746 21.1998C6.17461 21.1998 2.84961 17.3998 2.84961 12.5748C2.84961 6.8748 7.37461 3.0498 12.5246 3.0498C17.4496 3.0498 21.1246 6.0748 21.1246 10.8498C21.1246 15.1998 18.8246 16.9248 16.5246 16.9248C15.3996 16.9248 14.4746 16.3998 14.0746 15.6498C13.2996 16.3998 12.1246 16.8748 10.9996 16.8748C8.24961 16.8748 6.84961 14.9248 6.84961 12.5748C6.84961 9.5498 9.04961 7.0998 12.2746 7.0998C13.1996 7.0998 13.9496 7.3498 14.5246 7.7748L14.6246 7.3498H16.9996L15.8246 12.8498C15.5996 13.9498 15.8496 14.8248 16.9246 14.8248C18.2496 14.8248 19.0246 13.7248 19.0246 10.7998C19.0246 6.8998 15.9496 5.0748 12.4996 5.0748C8.62461 5.0748 5.04961 7.7498 5.04961 12.5748C5.04961 16.5248 7.57461 19.0998 11.5746 19.0998C13.0746 19.0998 14.6246 18.7748 15.9746 18.0748L16.7996 20.0998C15.2496 20.7998 13.1996 21.1998 11.5746 21.1998ZM11.3996 14.5248C12.0496 14.5248 12.6996 14.3498 13.2246 13.8248L14.0246 10.1248C13.5746 9.6498 12.9246 9.4248 12.2996 9.4248C10.6496 9.4248 9.44961 10.6998 9.44961 12.3748C9.44961 13.6748 10.0746 14.5248 11.3996 14.5248Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MAIL2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 6C3.89543 6 3 6.89543 3 8V17C3 18.1046 3.89543 19 5 19H19C20.1046 19 21 18.1046 21 17V8C21 6.89543 20.1046 6 19 6H5ZM19.1604 8.14443C18.964 7.77972 18.5091 7.64327 18.1444 7.83965L12 11.1482L5.85557 7.83965C5.49087 7.64327 5.03603 7.77972 4.83965 8.14443C4.64327 8.50913 4.77972 8.96397 5.14443 9.16035L11.6444 12.6604C11.8664 12.7799 12.1336 12.7799 12.3556 12.6604L18.8556 9.16035C19.2203 8.96397 19.3567 8.50913 19.1604 8.14443Z',\n fill: color || EColorPalette.cBlue2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.IPHONE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M16.1667 1H7.83333C6.42705 1 5.75 1.98122 5.75 3.5V20.5C5.75 22.0188 6.42705 23 7.83333 23H16.1667C17.5729 23 18.25 22.0188 18.25 20.5V3.5C18.25 1.98122 17.5729 1 16.1667 1ZM7.13889 19V4H16.8611V19H7.13889Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M7 4V19H17V4H7Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 22C12.5523 22 13 21.5523 13 21C13 20.4477 12.5523 20 12 20C11.4477 20 11 20.4477 11 21C11 21.5523 11.4477 22 12 22Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.IMPORT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n opacity: 0.3,\n x: 13.5,\n y: 13,\n width: 2,\n height: 12,\n rx: 1,\n transform: 'rotate(-180 13.5 13)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M17.5 7.99998C16.9477 7.99998 16.5 7.55227 16.5 6.99999C16.5 6.4477 16.9477 5.99999 17.5 5.99999H18.5C20.7091 5.99999 22.5 7.79085 22.5 9.99999V18C22.5 20.2091 20.7091 22 18.5 22H6.5C4.29086 22 2.5 20.2091 2.5 18L2.5 9.99304C2.5 7.7839 4.29086 5.99304 6.5 5.99304H7.5C8.05229 5.99304 8.5 6.44076 8.5 6.99304C8.5 7.54533 8.05229 7.99304 7.5 7.99304H6.5C5.39543 7.99304 4.5 8.88847 4.5 9.99304V18C4.5 19.1046 5.39543 20 6.5 20H18.5C19.6046 20 20.5 19.1046 20.5 18V9.99999C20.5 8.89542 19.6046 7.99998 18.5 7.99998H17.5Z',\n opacity: 0.3,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M14.7929 10.2929C15.1834 9.90237 15.8166 9.90237 16.2071 10.2929C16.5976 10.6834 16.5976 11.3166 16.2071 11.7071L13.2071 14.7071C12.8166 15.0976 12.1834 15.0976 11.7929 14.7071L8.79289 11.7071C8.40237 11.3166 8.40237 10.6834 8.79289 10.2929C9.18342 9.90237 9.81658 9.90237 10.2071 10.2929L12.5 12.5858L14.7929 10.2929Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPORT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M17.5 7.99998C16.9477 7.99998 16.5 7.55227 16.5 6.99999C16.5 6.4477 16.9477 5.99999 17.5 5.99999H18.5C20.7091 5.99999 22.5 7.79085 22.5 9.99999V18C22.5 20.2091 20.7091 22 18.5 22H6.5C4.29086 22 2.5 20.2091 2.5 18L2.5 9.99304C2.5 7.7839 4.29086 5.99304 6.5 5.99304H7.5C8.05229 5.99304 8.5 6.44076 8.5 6.99304C8.5 7.54533 8.05229 7.99304 7.5 7.99304H6.5C5.39543 7.99304 4.5 8.88847 4.5 9.99304V18C4.5 19.1046 5.39543 20 6.5 20H18.5C19.6046 20 20.5 19.1046 20.5 18V9.99999C20.5 8.89542 19.6046 7.99998 18.5 7.99998H17.5Z',\n opacity: 0.3,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n width: 2,\n height: 12,\n rx: 1,\n transform: 'matrix(-1 0 0 1 13.5 2)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M12.5 2.41421L14.7929 4.70711C15.1834 5.09763 15.8166 5.09763 16.2071 4.70711C16.5976 4.31658 16.5976 3.68342 16.2071 3.29289L13.2071 0.292893C12.8166 -0.097631 12.1834 -0.097631 11.7929 0.292893L8.79289 3.29289C8.40237 3.68342 8.40237 4.31658 8.79289 4.70711C9.18342 5.09763 9.81658 5.09763 10.2071 4.70711L12.5 2.41421Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.NOTIFICATION: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.5 3C9.01472 3 7 5.01472 7 7.5V12H5.5C4.67157 12 4 12.6716 4 13.5C4 14.3284 4.67157 15 5.5 15H18.5C19.3284 15 20 14.3284 20 13.5C20 12.6716 19.3284 12 18.5 12H17V7.5C17 5.01472 14.9853 3 12.5 3H11.5Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getRectangle({\n x: 10,\n y: 16,\n width: 4,\n height: 4,\n rx: 2,\n opacity: 0.3,\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHECK: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M10.3472 3.70553C10.5558 3.46006 10.924 3.43021 11.1694 3.63886C11.4149 3.84751 11.4448 4.21565 11.2361 4.46112L6.27779 10.2945C6.06586 10.5438 5.69035 10.57 5.44578 10.3526L2.82078 8.01931C2.57999 7.80528 2.5583 7.43657 2.77233 7.19578C2.98637 6.95499 3.35508 6.9333 3.59587 7.14734L5.77511 9.08444L10.3472 3.70553Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HYPERLINK: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M4.22085 14.1209C3.43981 14.902 3.43981 16.1683 4.22085 16.9494L7.04928 19.7778C7.83033 20.5588 9.09666 20.5588 9.87771 19.7778L12.7061 16.9494C13.4872 16.1683 13.4872 14.902 12.7061 14.1209L11.999 13.4138L9.87771 15.5352C9.48718 15.9257 8.85402 15.9257 8.46349 15.5352C8.07297 15.1446 8.07297 14.5115 8.46349 14.1209L10.5848 11.9996L9.87771 11.2925C9.09666 10.5115 7.83033 10.5115 7.04928 11.2925L4.22085 14.1209Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.2931 7.05063C10.5121 7.83168 10.5121 9.09801 11.2931 9.87906L12.0002 10.5862L14.1215 8.46484C14.5121 8.07432 15.1452 8.07432 15.5358 8.46484C15.9263 8.85537 15.9263 9.48853 15.5358 9.87906L13.4144 12.0004L14.1215 12.7075C14.9026 13.4885 16.1689 13.4885 16.95 12.7075L19.7784 9.87906C20.5594 9.09801 20.5594 7.83168 19.7784 7.05063L16.95 4.2222C16.1689 3.44115 14.9026 3.44115 14.1215 4.2222L11.2931 7.05063Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_TO_BOTTOM: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getRectangle({\n x: 11,\n y: 3,\n width: 2,\n height: 14,\n rx: 1,\n opacity: 0.3,\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getPath({\n d: 'M6.70711 9.29289C6.31658 8.90237 5.68342 8.90237 5.29289 9.29289C4.90237 9.68342 4.90237 10.3166 5.29289 10.7071L11.2929 16.7071C11.6715 17.0857 12.2811 17.0989 12.6757 16.7372L18.6757 11.2372C19.0828 10.864 19.1103 10.2314 18.7372 9.82427C18.364 9.41716 17.7314 9.38965 17.3243 9.76284L12.0301 14.6159L6.70711 9.29289Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getRectangle({\n x: 3,\n y: 19,\n width: 18,\n height: 2,\n rx: 1,\n opacity: 0.3,\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.COMMENT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 3C3.34315 3 2 4.34315 2 6V15C2 16.6569 3.34315 18 5 18H18.0249L20.3178 20.2929C20.9478 20.9229 22.0249 20.4767 22.0249 19.5858V15L22 15.0098C22 15.0065 22 15.0033 22 15V6C22 4.34315 20.6569 3 19 3H5Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.COMMENT2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M6.5 3C4.84315 3 3.5 4.34315 3.5 6V15C3.5 16.6569 4.84315 18 6.5 18H18.5249L20.8178 20.2929C21.4478 20.9229 22.5249 20.4767 22.5249 19.5858V15L22.5 15.0098C22.5 15.0065 22.5 15.0033 22.5 15V6C22.5 4.34315 21.1569 3 19.5 3H6.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8 12C7.17157 12 6.5 11.3284 6.5 10.5C6.5 9.67157 7.17157 9 8 9C8.82843 9 9.5 9.67157 9.5 10.5C9.5 11.3284 8.82843 12 8 12ZM13 12C12.1716 12 11.5 11.3284 11.5 10.5C11.5 9.67157 12.1716 9 13 9C13.8284 9 14.5 9.67157 14.5 10.5C14.5 11.3284 13.8284 12 13 12ZM18 12C17.1716 12 16.5 11.3284 16.5 10.5C16.5 9.67157 17.1716 9 18 9C18.8284 9 19.5 9.67157 19.5 10.5C19.5 11.3284 18.8284 12 18 12Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHECKBOX_SELECTED: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 16 16')}\n ${this.getRectangle({\n width: 16,\n height: 16,\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getPath({\n d: 'M0 2C0 0.895431 0.895431 0 2 0H14C15.1046 0 16 0.895431 16 2V14C16 15.1046 15.1046 16 14 16H2C0.895431 16 0 15.1046 0 14V2Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getPath({\n d: 'M11.8254 4.23489C12.0638 3.95435 12.4845 3.92024 12.7651 4.1587C13.0456 4.39715 13.0797 4.81788 12.8413 5.09842L7.17461 11.7651C6.93241 12.05 6.50325 12.08 6.22374 11.8316L3.22374 9.16493C2.94856 8.92032 2.92377 8.49894 3.16838 8.22375C3.41299 7.94856 3.83437 7.92377 4.10956 8.16838L6.60013 10.3822L11.8254 4.23489Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHECKBOX_DEFAULT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 16 16')}\n ${this.getRectangle({\n width: 16,\n height: 16,\n fill: EColorPalette.cWhite,\n })}\n ${this.getPath({\n d: 'M1 2C1 1.44772 1.44772 1 2 1H14C14.5523 1 15 1.44772 15 2V14C15 14.5523 14.5523 15 14 15H2C1.44772 15 1 14.5523 1 14V2Z',\n fill: EColorPalette.cWhite,\n stroke: color || EColorPalette.cGray7,\n strokeWidth: 2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SAVE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6 4H7V11H17V4L19.8536 6.85355C19.9473 6.94732 20 7.0745 20 7.20711V18C20 19.3 19.2 20 18 20H6C4.79111 20 4 19.3 4 18V6C4 4.7 4.79111 4 6 4Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 12,\n y: 4,\n width: 3,\n height: 5,\n rx: 0.5,\n fill: color || EColorPalette.cGreen3,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TICKET: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6.63595 11.0857L3.10042 14.6213C2.70989 15.0118 2.70989 15.645 3.10042 16.0355L4.54999 17.4851C5.52068 16.8419 6.84138 16.948 7.69661 17.8032C8.55184 18.6585 8.65791 19.9792 8.0148 20.9499L9.46438 22.3994C9.8549 22.79 10.4881 22.79 10.8786 22.3994L14.4141 18.8639L12.9999 17.4497C12.6094 17.0592 12.6094 16.426 12.9999 16.0355C13.3904 15.645 14.0236 15.645 14.4141 16.0355L15.8283 17.4497L22.8994 10.3786C23.2899 9.9881 23.2899 9.35493 22.8994 8.96441L21.4498 7.51483C20.4791 8.15794 19.1584 8.05187 18.3032 7.19664C17.448 6.34141 17.3419 5.02071 17.985 4.05002L16.5354 2.60045C16.1449 2.20992 15.5118 2.20992 15.1212 2.60045L8.05016 9.67151L9.46438 11.0857C9.8549 11.4763 9.8549 12.1094 9.46438 12.4999C9.07385 12.8905 8.44069 12.8905 8.05016 12.4999L6.63595 11.0857ZM10.1715 14.6213C9.78096 14.2307 9.78096 13.5976 10.1715 13.207C10.562 12.8165 11.1952 12.8165 11.5857 13.207L12.2928 13.9142C12.6833 14.3047 12.6833 14.9378 12.2928 15.3284C11.9023 15.7189 11.2691 15.7189 10.8786 15.3284L10.1715 14.6213Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TICKET2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6.63595 11.0857L3.10042 14.6213C2.70989 15.0118 2.70989 15.645 3.10042 16.0355L4.54999 17.4851C5.52068 16.8419 6.84138 16.948 7.69661 17.8032C8.55184 18.6585 8.65791 19.9792 8.0148 20.9499L9.46438 22.3994C9.8549 22.79 10.4881 22.79 10.8786 22.3994L14.4141 18.8639L12.9999 17.4497C12.6094 17.0592 12.6094 16.426 12.9999 16.0355C13.3904 15.645 14.0236 15.645 14.4141 16.0355L15.8283 17.4497L22.8994 10.3786C23.2899 9.9881 23.2899 9.35493 22.8994 8.96441L21.4498 7.51483C20.4791 8.15794 19.1584 8.05187 18.3032 7.19664C17.448 6.34141 17.3419 5.02071 17.985 4.05002L16.5354 2.60045C16.1449 2.20992 15.5118 2.20992 15.1212 2.60045L8.05016 9.67151L9.46438 11.0857C9.8549 11.4763 9.8549 12.1094 9.46438 12.4999C9.07385 12.8905 8.44069 12.8905 8.05016 12.4999L6.63595 11.0857ZM10.1715 14.6213C9.78096 14.2307 9.78096 13.5976 10.1715 13.207C10.562 12.8165 11.1952 12.8165 11.5857 13.207L12.2928 13.9142C12.6833 14.3047 12.6833 14.9378 12.2928 15.3284C11.9023 15.7189 11.2691 15.7189 10.8786 15.3284L10.1715 14.6213Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MOVE_OUT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2.56068 10.682C1.97489 11.2678 1.97489 12.2175 2.56068 12.8033L4.682 14.9246C5.26778 15.5104 6.21753 15.5104 6.80332 14.9246L8.92464 12.8033C9.51043 12.2175 9.51043 11.2678 8.92464 10.682L6.80332 8.56065C6.21753 7.97486 5.26778 7.97486 4.682 8.56065L2.56068 10.682ZM14.5607 10.682C13.9749 11.2678 13.9749 12.2175 14.5607 12.8033L16.682 14.9246C17.2678 15.5104 18.2175 15.5104 18.8033 14.9246L20.9246 12.8033C21.5104 12.2175 21.5104 11.2678 20.9246 10.682L18.8033 8.56065C18.2175 7.97486 17.2678 7.97486 16.682 8.56065L14.5607 10.682Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8.56068 4.68197C7.97489 5.26775 7.97489 6.2175 8.56068 6.80329L10.682 8.92461C11.2678 9.51039 12.2175 9.51039 12.8033 8.92461L14.9246 6.80329C15.5104 6.2175 15.5104 5.26775 14.9246 4.68197L12.8033 2.56065C12.2175 1.97486 11.2678 1.97486 10.682 2.56065L8.56068 4.68197ZM8.56068 16.682C7.97489 17.2678 7.97489 18.2175 8.56068 18.8033L10.682 20.9246C11.2678 21.5104 12.2175 21.5104 12.8033 20.9246L14.9246 18.8033C15.5104 18.2175 15.5104 17.2678 14.9246 16.682L12.8033 14.5606C12.2175 13.9749 11.2678 13.9749 10.682 14.5606L8.56068 16.682Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HIDDEN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.0955 17.9608C11.3879 17.9865 11.6893 18 12 18C16.909 18 21 12 21 12C21 12 20.3303 11.0179 19.2078 9.84839L11.0955 17.9608Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M14.5051 6.49485C13.7076 6.18695 12.8665 6 12 6C5.45455 6 3 12 3 12C3 12 3.75006 13.8335 5.52661 15.4734L9 12C9 10.3431 10.3431 9 12 9L14.5051 6.49485Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 5.1001,\n y: 18.4351,\n width: 19,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n transform: 'rotate(-45 5.1001 18.4351)',\n })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPAND_ARROWS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5.46452 17.1214C5.074 17.5119 5.074 18.1451 5.46452 18.5356C5.85505 18.9261 6.48821 18.9261 6.87874 18.5356L12.0001 13.4143L18.1924 19.6067C18.583 19.9972 19.2161 19.9972 19.6067 19.6067C19.9972 19.2162 19.9972 18.583 19.6067 18.1925L13.4143 12.0001L19.6067 5.80769C19.9972 5.41717 19.9972 4.784 19.6067 4.39348C19.2161 4.00295 18.583 4.00295 18.1924 4.39348L12.0001 10.5859L6.87874 5.46455C6.48821 5.07402 5.85505 5.07402 5.46452 5.46455C5.074 5.85507 5.074 6.48824 5.46452 6.87876L10.5858 12.0001L5.46452 17.1214Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M18 6H15C15 6 14 5.82843 14 5C14 4.17157 15 4 15 4H20V9C20 9 20 10 19 10C18 10 18 9 18 9V6ZM9 18H6V15C6 15 6 14 5 14C4 14 4 15 4 15V20H9C9 20 10 19.8284 10 19C10 18.1716 9 18 9 18ZM18 15V18H15C15 18 14 18 14 19C14 20 15 20 15 20H20V15C20 15 19.8284 14 19 14C18.1716 14 18 15 18 15ZM6 9V6H9C9 6 10 6 10 5C10 4 9 4 9 4H4V9C4 9 4.17157 10 5 10C5.82843 10 6 9 6 9Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.TRASH: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M7.39346 20.115L6.5 8.5H18.5L17.6065 20.115C17.5464 20.8965 16.8948 21.5 16.111 21.5H8.88905C8.10524 21.5 7.45358 20.8965 7.39346 20.115ZM8.95438 14.5894L8.5 10.5H16.5L16.0518 14.5339L8.95438 14.5894Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M14.5 5V4C14.5 3.72386 14.2761 3.5 14 3.5H11C10.7239 3.5 10.5 3.72386 10.5 4V5H6C5.72386 5 5.5 5.22386 5.5 5.5V6C5.5 6.27614 5.72386 6.5 6 6.5H19C19.2761 6.5 19.5 6.27614 19.5 6V5.5C19.5 5.22386 19.2761 5 19 5H14.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHART_LINE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5.5 19H20.5C21.0523 19 21.5 19.4477 21.5 20C21.5 20.5523 21.0523 21 20.5 21H4.5C3.94772 21 3.5 20.5523 3.5 20V4C3.5 3.44772 3.94772 3 4.5 3C5.05228 3 5.5 3.44772 5.5 4V19Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M9.22954 14.684C8.85181 15.0869 8.21897 15.1073 7.81606 14.7296C7.41315 14.3518 7.39274 13.719 7.77047 13.3161L11.5205 9.3161C11.8858 8.92644 12.4928 8.89264 12.8991 9.23935L15.8589 11.765L19.7151 6.8804C20.0573 6.44692 20.6862 6.37294 21.1196 6.71516C21.5531 7.05738 21.6271 7.68621 21.2849 8.11969L16.7849 13.8197C16.4334 14.2649 15.7824 14.3289 15.3509 13.9607L12.3268 11.3802L9.22954 14.684Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.NOTIFICATIONS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.5 3C9.01472 3 7 5.01472 7 7.5V12H5.5C4.67157 12 4 12.6716 4 13.5C4 14.3284 4.67157 15 5.5 15H18.5C19.3284 15 20 14.3284 20 13.5C20 12.6716 19.3284 12 18.5 12H17V7.5C17 5.01472 14.9853 3 12.5 3H11.5Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 10,\n y: 16,\n width: 4,\n height: 4,\n rx: 2,\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SETTINGS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M18.6225 9.75H18.75C19.9926 9.75 21 10.7574 21 12C21 13.2426 19.9926 14.25 18.75 14.25L18.6855 14.25C18.4912 14.2508 18.3159 14.3669 18.2394 14.5454C18.1557 14.7351 18.1943 14.9481 18.3278 15.0847L18.3725 15.1294C18.795 15.5514 19.0324 16.1241 19.0324 16.7212C19.0324 17.3184 18.795 17.8911 18.3731 18.3125C17.9511 18.735 17.3784 18.9724 16.7812 18.9724C16.1841 18.9724 15.6114 18.735 15.1897 18.3128L15.1506 18.2736C15.0081 18.1343 14.7951 18.0957 14.6054 18.1794C14.4269 18.2559 14.3108 18.4312 14.31 18.6225V18.75C14.31 19.9926 13.3026 21 12.06 21C10.8174 21 9.81 19.9926 9.81 18.75C9.80552 18.4999 9.67899 18.323 9.44718 18.2361C9.26485 18.1557 9.05191 18.1943 8.91533 18.3278L8.87063 18.3725C8.4486 18.795 7.87592 19.0324 7.27875 19.0324C6.68158 19.0324 6.1089 18.795 5.68746 18.3731C5.26497 17.9511 5.02757 17.3784 5.02757 16.7812C5.02757 16.1841 5.26497 15.6114 5.68717 15.1897L5.72635 15.1506C5.86571 15.0081 5.90432 14.7951 5.82065 14.6054C5.7441 14.4269 5.56881 14.3108 5.3775 14.31H5.25C4.00736 14.31 3 13.3026 3 12.06C3 10.8174 4.00736 9.81 5.25 9.81C5.50008 9.80552 5.677 9.67899 5.76385 9.44718C5.84432 9.26485 5.80571 9.05191 5.67217 8.91533L5.62747 8.87063C5.20497 8.4486 4.96757 7.87592 4.96757 7.27875C4.96757 6.68158 5.20497 6.1089 5.62687 5.68746C6.0489 5.26497 6.62158 5.02757 7.21875 5.02757C7.81592 5.02757 8.3886 5.26497 8.81033 5.68717L8.84945 5.72635C8.99191 5.86571 9.20485 5.90432 9.38718 5.82385L9.49485 5.80115C9.65041 5.71689 9.74929 5.55401 9.75 5.3775V5.25C9.75 4.00736 10.7574 3 12 3C13.2426 3 14.25 4.00736 14.25 5.25L14.25 5.31451C14.2508 5.50881 14.3669 5.6841 14.5528 5.76385C14.7351 5.84432 14.9481 5.80571 15.0847 5.67217L15.1294 5.62747C15.5514 5.20497 16.1241 4.96757 16.7212 4.96757C17.3184 4.96757 17.8911 5.20497 18.3125 5.62687C18.735 6.0489 18.9724 6.62158 18.9724 7.21875C18.9724 7.81592 18.735 8.3886 18.3128 8.81033L18.2736 8.84945C18.1343 8.99191 18.0957 9.20485 18.1761 9.38718L18.1989 9.49485C18.2831 9.65041 18.446 9.74929 18.6225 9.75Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SETTINGS2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M1.68628 12.0001L4.99999 8.68637V5.00008H8.68628L11.5858 2.10059L14.4853 5.00008H19V9.5148L21.4853 12.0001L19 14.4854V19.0001H14.4853L11.5858 21.8996L8.68628 19.0001H4.99999V15.3138L1.68628 12.0001ZM15 12.0001C15 13.6569 13.6568 15.0001 12 15.0001C10.3431 15.0001 8.99999 13.6569 8.99999 12.0001C8.99999 10.3432 10.3431 9.00008 12 9.00008C13.6568 9.00008 15 10.3432 15 12.0001Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPAND: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11 6H18V13C18 13 18 14 19 14C20 14 20 13 20 13V4H11C11 4 10 4.17157 10 5C10 5.82843 11 6 11 6ZM13 18H6V11C6 11 6 10 5 10C4 10 4 11 4 11V20H13C13 20 14 19.8284 14 19C14 18.1716 13 18 13 18Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 7.75732,\n y: 14.8284,\n width: 10,\n height: 2,\n rx: 1,\n transform: 'rotate(-45 7.75732 14.8284)',\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.COLLAPSE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M20 9H15V4C15 4 15 3 14 3C13 3 13 4 13 4V11H20C20 11 21 10.8284 21 10C21 9.17157 20 9 20 9ZM5 14H10V19C10 19 10 20 11 20C12 20 12 19 12 19V12H5C5 12 4 12.1716 4 13C4 13.8284 5 14 5 14Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M16.8786 5.70701C16.4881 6.09754 16.4881 6.7307 16.8786 7.12123C17.2691 7.51175 17.9023 7.51175 18.2928 7.12123L21.1212 4.2928C21.5118 3.90228 21.5118 3.26911 21.1212 2.87859C20.7307 2.48806 20.0975 2.48806 19.707 2.87859L16.8786 5.70701ZM3.87859 18.707C3.48806 19.0975 3.48806 19.7307 3.87859 20.1212C4.26911 20.5118 4.90228 20.5118 5.2928 20.1212L8.12123 17.2928C8.51175 16.9023 8.51175 16.2691 8.12123 15.8786C7.7307 15.4881 7.09754 15.4881 6.70701 15.8786L3.87859 18.707Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BLOCKS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 4.5,\n y: 4,\n width: 7,\n height: 7,\n rx: 1.5,\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M13.5 5.5C13.5 4.67157 14.1716 4 15 4H19C19.8284 4 20.5 4.67157 20.5 5.5V9.5C20.5 10.3284 19.8284 11 19 11H15C14.1716 11 13.5 10.3284 13.5 9.5V5.5ZM4.5 14.5C4.5 13.6716 5.17157 13 6 13H10C10.8284 13 11.5 13.6716 11.5 14.5V18.5C11.5 19.3284 10.8284 20 10 20H6C5.17157 20 4.5 19.3284 4.5 18.5V14.5ZM15 13C14.1716 13 13.5 13.6716 13.5 14.5V18.5C13.5 19.3284 14.1716 20 15 20H19C19.8284 20 20.5 19.3284 20.5 18.5V14.5C20.5 13.6716 19.8284 13 19 13H15Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MENU: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 4.5,\n y: 5,\n width: 16,\n height: 3,\n rx: 1.5,\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M6 10C5.17157 10 4.5 10.6716 4.5 11.5C4.5 12.3284 5.17157 13 6 13H19C19.8284 13 20.5 12.3284 20.5 11.5C20.5 10.6716 19.8284 10 19 10H6ZM6 15C5.17157 15 4.5 15.6716 4.5 16.5C4.5 17.3284 5.17157 18 6 18H19C19.8284 18 20.5 17.3284 20.5 16.5C20.5 15.6716 19.8284 15 19 15H6Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BULB: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M12 17C16.4183 17 20 13.4183 20 9C20 4.58172 16.4183 1 12 1C7.58172 1 4 4.58172 4 9C4 13.4183 7.58172 17 12 17Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M6.53809 9L10.5679 19.3624L11.9759 18.8149L13.3744 19.3674L17.4702 9H6.53809ZM9.46178 11H14.5297L11.9758 17.4645L9.46178 11Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M10 22H14C14 23.1046 13.1046 24 12 24C10.8954 24 10 23.1046 10 22Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8 17C8 16.4477 8.44772 16 9 16H15C15.5523 16 16 16.4477 16 17C16 17.5523 15.5523 18 15 18C15.5523 18 16 18.4477 16 19C16 19.5523 15.5523 20 15 20C15.5523 20 16 20.4477 16 21C16 21.5523 15.5523 22 15 22H9C8.44772 22 8 21.5523 8 21C8 20.4477 8.44772 20 9 20C8.44772 20 8 19.5523 8 19C8 18.4477 8.44772 18 9 18C8.44772 18 8 17.5523 8 17Z',\n fill: EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BUG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M1 15.8285C0.447715 15.8285 -1.10011e-07 15.3808 -1.22081e-07 14.8285C-1.34152e-07 14.2762 0.447715 13.8285 1 13.8285L3 13.8285C3.55228 13.8285 4 14.2762 4 14.8285C4 15.3808 3.55228 15.8285 3 15.8285L1 15.8285ZM1.70711 10.7072C1.31658 10.3167 1.31658 9.68351 1.70711 9.29299C2.09763 8.90246 2.7308 8.90246 3.12132 9.29299L4.53553 10.7072C4.92606 11.0977 4.92606 11.7309 4.53553 12.1214C4.14501 12.5119 3.51184 12.5119 3.12132 12.1214L1.70711 10.7072ZM1.70711 20.1214C1.31658 19.7309 1.31658 19.0977 1.70711 18.7072L3.12132 17.293C3.51184 16.9025 4.14501 16.9025 4.53553 17.293C4.92606 17.6835 4.92606 18.3167 4.53553 18.7072L3.12132 20.1214C2.7308 20.5119 2.09763 20.5119 1.70711 20.1214Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n width: 2,\n height: 4,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n transform: 'matrix(0.917288 -0.398225 -0.398225 -0.917288 8.59302 5.46558)',\n opacity: 0.3,\n })},\n ${this.getRectangle({\n opacity: 0.3,\n x: 14.8345,\n y: 5.46558,\n width: 2,\n height: 4,\n rx: 1,\n transform: 'rotate(-156.533 14.8345 5.46558)',\n fill: color || EColorPalette.cGray4,\n })},\n\n ${this.getPath({\n d: 'M22.1213 10.7071C22.5118 10.3166 22.5118 9.68342 22.1213 9.29289C21.7308 8.90237 21.0976 8.90237 20.7071 9.29289L19.2929 10.7071C18.9024 11.0976 18.9024 11.7308 19.2929 12.1213C19.6834 12.5118 20.3166 12.5118 20.7071 12.1213L22.1213 10.7071ZM22.8284 15.8286C23.3807 15.8286 23.8284 15.3809 23.8284 14.8286C23.8284 14.2763 23.3807 13.8286 22.8284 13.8286H20.8284C20.2761 13.8286 19.8284 14.2763 19.8284 14.8286C19.8284 15.3809 20.2761 15.8286 20.8284 15.8286H22.8284ZM22.1213 20.1214C22.5118 19.7309 22.5118 19.0977 22.1213 18.7072L20.7071 17.293C20.3166 16.9025 19.6834 16.9025 19.2929 17.293C18.9024 17.6835 18.9024 18.3167 19.2929 18.7072L20.7071 20.1214C21.0976 20.5119 21.7308 20.5119 22.1213 20.1214Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M6 12H18V17C18 20.3137 15.3137 23 12 23C8.68629 23 6 20.3137 6 17V12Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M6 10C6 6.68629 8.68629 4 12 4C15.3137 4 18 6.68629 18 10V11H6V10Z',\n fill: EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOLLAR_CIRCLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 706 548')}\n \n \n ${this.getEndUrlClip()}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.LOGO: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 1004 788')}\n ${this.getPath({\n d: 'M226.508 517.964C245.214 517.964 255.95 526.977 255.95 542.726C255.95 559.095 245.214 568.625 226.508 568.625H209.398V590.482H196.853V517.964H226.508ZM209.398 557.642H225.976C237.455 557.642 243.938 552.876 243.938 543.034C243.938 533.503 237.457 528.948 225.976 528.948H209.395L209.398 557.642Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M334.812 568.519C333.749 568.622 332.581 568.622 331.411 568.622H313.768V590.482H301.226V517.964H331.411C350.437 517.964 361.384 526.977 361.384 542.726C361.384 554.33 355.858 562.514 345.973 566.243L362.66 590.482H348.417L334.812 568.519ZM331.411 557.642C342.89 557.642 349.481 552.875 349.481 543.034C349.481 533.503 342.89 528.947 331.411 528.947H313.768V557.644L331.411 557.642Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M483.614 554.223C483.614 574.942 466.395 591 444.18 591C421.966 591 404.748 574.942 404.748 554.223C404.748 533.399 421.967 517.652 444.18 517.652C466.393 517.652 483.614 533.503 483.614 554.223ZM417.502 554.223C417.502 568.622 429.725 580.019 444.286 580.019C451.265 580.027 457.961 577.338 462.909 572.542C467.856 567.745 470.65 561.232 470.679 554.43C470.707 547.629 467.967 541.094 463.06 536.258C458.153 531.422 451.479 528.68 444.501 528.633H444.286C429.619 528.633 417.502 539.82 417.502 554.223Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M559.501 517.964C578.208 517.964 588.943 526.977 588.943 542.726C588.943 559.095 578.208 568.625 559.501 568.625H542.392V590.482H529.847V517.964H559.501ZM542.392 557.642H558.972C570.451 557.642 576.935 552.876 576.935 543.034C576.935 533.503 570.454 528.948 558.972 528.948H542.389L542.392 557.642Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M696.504 560.645C696.504 579.501 684.812 590.896 665.361 590.896C645.805 590.896 634.006 579.501 634.006 560.645V517.964H642.51V560.646C642.51 574.733 651.225 582.92 665.361 582.92C679.497 582.92 688.001 574.736 688.001 560.646V517.964H696.504V560.645Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M778.13 517.964C796.518 517.964 807.147 526.871 807.147 542.309C807.147 558.367 796.518 567.588 778.13 567.588H758.682V590.482H750.179V517.964H778.13ZM758.682 559.609H777.814C791.206 559.609 798.965 553.808 798.965 542.516C798.965 531.534 791.206 525.94 777.814 525.94H758.682V559.609Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M604.941 309.075V328.658H635.576L579.802 374.02V197H431.221V297.938L383.159 311.987V424.991L365.875 439.135C360.602 436.458 354.542 435.642 348.721 436.823C342.901 438.004 337.679 441.11 333.94 445.615C330.2 450.12 328.174 455.746 328.204 461.541C328.234 467.335 330.319 472.941 334.105 477.409C337.891 481.877 343.145 484.931 348.977 486.055C354.809 487.179 360.861 486.302 366.106 483.574C371.351 480.846 375.467 476.435 377.756 471.087C380.046 465.739 380.368 459.785 378.668 454.232L441.273 403.008L508.26 457.719L649.926 342.485V372.579H670.017V309.075H604.941ZM353.936 472.684C351.653 472.683 349.421 472.022 347.523 470.786C345.625 469.549 344.146 467.791 343.273 465.735C342.399 463.679 342.171 461.416 342.617 459.234C343.062 457.051 344.162 455.046 345.776 453.472C347.391 451.899 349.448 450.827 351.687 450.393C353.927 449.959 356.248 450.181 358.357 451.033C360.467 451.884 362.27 453.326 363.539 455.176C364.808 457.026 365.485 459.202 365.486 461.427C365.486 462.905 365.188 464.369 364.608 465.735C364.027 467.101 363.177 468.342 362.104 469.388C361.031 470.433 359.758 471.262 358.357 471.828C356.955 472.393 355.453 472.684 353.936 472.684ZM498.311 424.043L441.26 377.45L403.249 408.548V326.554L498.311 298.766V424.043ZM559.711 390.361L518.402 423.961V272.45L451.312 292.064V216.583H559.711V390.361Z',\n fill: color || EColorPalette.cBlack,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXCHANGE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 17 16')}\n ${this.getRectangle({\n x: 5.04688,\n y: 4.66663,\n width: 1.33333,\n height: 8,\n rx: 0.666667,\n transform: 'rotate(-90 5.04688 4.66663)',\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M6.85161 5.52864C7.11196 5.78899 7.11196 6.2111 6.85161 6.47144C6.59126 6.73179 6.16915 6.73179 5.9088 6.47144L3.9088 4.47144C3.64845 4.2111 3.64845 3.78899 3.9088 3.52864L5.9088 1.52864C6.16915 1.26829 6.59126 1.26829 6.85161 1.52864C7.11196 1.78899 7.11196 2.2111 6.85161 2.47145L5.32302 4.00004L6.85161 5.52864Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getRectangle({\n width: 1.33333,\n height: 8,\n rx: 0.666667,\n transform: 'matrix(0 -1 -1 0 11.7129 12.6666)',\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M9.90815 13.5286C9.6478 13.789 9.6478 14.2111 9.90815 14.4714C10.1685 14.7318 10.5906 14.7318 10.851 14.4714L12.851 12.4714C13.1113 12.2111 13.1113 11.789 12.851 11.5286L10.851 9.52864C10.5906 9.26829 10.1685 9.26829 9.90815 9.52864C9.6478 9.78899 9.6478 10.2111 9.90815 10.4714L11.4367 12L9.90815 13.5286Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.SENDING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M8.5 5.77181C8.5 5.40898 8.87431 5.16696 9.20518 5.31585L23.0456 11.544C23.4386 11.7209 23.4386 12.279 23.0456 12.4559L9.20518 18.6841C8.87431 18.833 8.5 18.591 8.5 18.2281V13.1669L20.947 12L8.5 10.8331V5.77181Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M4.5 6C3.94772 6 3.5 6.44772 3.5 7C3.5 7.55228 3.94772 8 4.5 8H5.5C6.05228 8 6.5 7.55228 6.5 7C6.5 6.44772 6.05228 6 5.5 6H4.5ZM0.5 12C0.5 11.4477 0.947715 11 1.5 11H5.5C6.05228 11 6.5 11.4477 6.5 12C6.5 12.5523 6.05228 13 5.5 13H1.5C0.947715 13 0.5 12.5523 0.5 12ZM3.5 17C3.5 16.4477 3.94772 16 4.5 16H5.5C6.05228 16 6.5 16.4477 6.5 17C6.5 17.5523 6.05228 18 5.5 18H4.5C3.94772 18 3.5 17.5523 3.5 17Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.REST: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M19.9607 2.91959C19.6133 2.8466 19.2593 2.81021 18.9044 2.81097V2.79359C18.3317 2.7931 17.7631 2.8901 17.223 3.08035C15.3893 0.963928 12.187 0.734737 10.0706 2.56842C9.65627 2.92741 9.30293 3.3512 9.02426 3.82332C6.24547 3.42262 3.668 5.35036 3.2673 8.12916C2.8666 10.908 4.79435 13.4854 7.57314 13.8861C7.82351 13.9222 8.07616 13.9396 8.32909 13.9381H8.51591C9.85092 16.4024 12.9309 17.3179 15.3953 15.9829C16.6096 15.3251 17.5034 14.2007 17.8703 12.8693C20.6179 13.4465 23.3131 11.6871 23.8904 8.93958C24.4676 6.19212 22.7083 3.49686 19.9607 2.91959ZM11.0098 10.1929C10.9179 10.2629 10.8036 10.2969 10.6883 10.2885H8.29867C8.16176 10.299 8.02582 10.2588 7.91654 10.1757C7.8341 10.0983 7.78935 9.98886 7.79467 9.87573C7.79712 9.79144 7.82775 9.71035 7.88157 9.64545C7.93952 9.56724 8.06117 9.4224 8.24653 9.21097L8.78095 8.62007L9.21543 8.12476L9.55867 7.73372C9.64992 7.6251 9.72378 7.53386 9.77592 7.46H8.45943C8.31296 7.4682 8.16615 7.45207 8.02495 7.41221C7.93224 7.38033 7.88591 7.2949 7.88591 7.15586C7.88206 7.06098 7.92214 6.96963 7.99453 6.90821C8.08078 6.84053 8.1894 6.80789 8.29867 6.81696H10.3538C10.5031 6.80898 10.6522 6.83728 10.7883 6.89952C10.8929 6.96143 10.9522 7.07831 10.9403 7.19931C10.9389 7.24993 10.9286 7.29995 10.9099 7.34703C10.894 7.39179 10.8721 7.43415 10.8447 7.47303L10.7448 7.59469L10.5927 7.76414L8.9504 9.58897H10.6883C10.8043 9.58006 10.9193 9.6158 11.0098 9.6889C11.0816 9.75451 11.1212 9.84808 11.1185 9.94524C11.1217 10.04 11.0817 10.131 11.0098 10.1929ZM14.7116 12.1741C14.638 12.2291 14.5469 12.2553 14.4553 12.248H12.5219C12.4157 12.2632 12.3077 12.2386 12.2185 12.1789C12.0963 12.0656 12.0839 11.8762 12.1916 11.7483C12.238 11.6875 12.335 11.573 12.4827 11.4051L12.9172 10.9315L13.2735 10.5361L13.5472 10.2233C13.6211 10.1364 13.6776 10.0625 13.721 10.0017H12.6479C12.5364 10.0058 12.425 9.9926 12.3176 9.96257C12.2438 9.9365 12.2047 9.86698 12.2047 9.75402C12.2019 9.67891 12.234 9.60678 12.2916 9.5585C12.361 9.50517 12.4475 9.47888 12.5349 9.48464H14.1642C14.2836 9.4779 14.4029 9.50028 14.5118 9.54981C14.5957 9.59874 14.6433 9.69216 14.6334 9.78878C14.6334 9.82886 14.626 9.86861 14.6117 9.90609C14.5987 9.9415 14.5812 9.97512 14.5596 10.006L14.4814 10.1016L14.3597 10.2363L13.0563 11.6962H14.4553C14.5476 11.6888 14.6392 11.7167 14.7116 11.7744C14.7686 11.8268 14.8003 11.9012 14.7985 11.9786C14.8001 12.0535 14.7682 12.1251 14.7116 12.1741ZM19.0608 9.96257C18.9689 10.0326 18.8546 10.0666 18.7393 10.0582H16.3105C16.1736 10.0686 16.0375 10.0284 15.9282 9.94519C15.843 9.86763 15.7968 9.75614 15.8022 9.64105C15.8046 9.54916 15.8402 9.46123 15.9021 9.3934C15.9601 9.31519 16.0817 9.17034 16.2671 8.95891L16.8015 8.36367L17.236 7.86836L17.5792 7.47732C17.669 7.37017 17.7415 7.27893 17.7965 7.2036H16.4713C16.3248 7.21158 16.178 7.19545 16.0368 7.15581C15.9412 7.12105 15.8978 7.0385 15.8978 6.89512C15.8939 6.80024 15.934 6.70889 16.0064 6.64746C16.0927 6.57979 16.2013 6.54715 16.3105 6.55622H18.3787C18.5281 6.54802 18.6772 6.57637 18.8132 6.63877C18.9178 6.70068 18.9771 6.81756 18.9652 6.93856C18.9638 6.98918 18.9535 7.0392 18.9348 7.08629C18.9188 7.13099 18.8969 7.17335 18.8697 7.21229L18.7697 7.3296L18.6177 7.49905L16.9797 9.32822H18.7176C18.8336 9.31932 18.9486 9.35505 19.0391 9.42815C19.1108 9.49376 19.1505 9.58734 19.1477 9.6845C19.1648 9.78443 19.1325 9.88648 19.0608 9.95822V9.96257Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M6.26093 19.8285C7.6191 19.8285 8.72011 18.7275 8.72011 17.3693C8.72011 16.0112 7.6191 14.9102 6.26093 14.9102C4.90277 14.9102 3.80176 16.0112 3.80176 17.3693C3.80176 18.7275 4.90277 19.8285 6.26093 19.8285Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M1.85524 22.6714C2.87987 22.6714 3.71049 21.8408 3.71049 20.8162C3.71049 19.7916 2.87987 18.9609 1.85524 18.9609C0.830621 18.9609 0 19.7916 0 20.8162C0 21.8408 0.830621 22.6714 1.85524 22.6714Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HAMMER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M18.9246 12.6464L21.7531 9.81798C21.9483 9.62272 22.2649 9.62272 22.4602 9.81798L23.1673 10.5251C23.3625 10.7204 23.3625 11.0369 23.1673 11.2322L20.3389 14.0606C20.1436 14.2559 19.827 14.2559 19.6318 14.0606L18.9246 13.3535C18.7294 13.1583 18.7294 12.8417 18.9246 12.6464ZM3.72185 17.9497L13.6213 8.05022C14.0119 7.65969 14.645 7.65969 15.0356 8.05022L16.4498 9.46443C16.8403 9.85496 16.8403 10.4881 16.4498 10.8786L6.55028 20.7781C6.15975 21.1687 5.52659 21.1687 5.13606 20.7781L3.72185 19.3639C3.33132 18.9734 3.33132 18.3402 3.72185 17.9497Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M10.0857 4.51477C12.0383 2.56215 15.2041 2.56215 17.1568 4.51477L20.6603 8.01831C20.678 8.03598 20.678 8.06463 20.6603 8.0823L17.5103 11.2323C17.3151 11.4275 16.9985 11.4275 16.8032 11.2323L10.0857 4.51477Z',\n fill: color || EColorPalette.cGray4,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SLEEP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M19.4251 19.4253C18.3065 20.5438 16.9497 21.3951 15.4559 21.9156C13.9622 22.4362 12.3701 22.6125 10.7986 22.4314C9.22717 22.2503 7.71694 21.7164 6.38074 20.8698C5.04454 20.0231 3.91691 18.8855 3.08207 17.5418C2.24724 16.1982 1.72677 14.6833 1.55956 13.1103C1.39235 11.5373 1.58271 9.94688 2.11642 8.45777C2.65013 6.96867 3.5134 5.6194 4.64174 4.51074C5.77009 3.40208 7.13435 2.56269 8.63261 2.05528C8.79219 2.00724 8.96321 2.01371 9.11869 2.07368C9.27418 2.13364 9.40526 2.24368 9.49125 2.38643C9.57724 2.52917 9.61324 2.69649 9.59357 2.86197C9.5739 3.02745 9.49967 3.18167 9.38261 3.30027C8.12509 4.55937 7.26904 6.16299 6.92267 7.90848C6.5763 9.65396 6.75514 11.463 7.43661 13.1068C8.11808 14.7507 9.27157 16.1556 10.7513 17.1441C12.231 18.1326 13.9706 18.6602 15.7501 18.6603C16.7328 18.6638 17.709 18.5015 18.6376 18.1803C18.798 18.1261 18.9719 18.1277 19.1313 18.1849C19.2906 18.242 19.4259 18.3514 19.5151 18.4953C19.6075 18.6376 19.649 18.8071 19.6326 18.976C19.6163 19.1449 19.5431 19.3033 19.4251 19.4253Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M17.0303 15.2197C17.171 15.3603 17.25 15.5511 17.25 15.75C17.25 15.9489 17.171 16.1397 17.0303 16.2803C16.8897 16.421 16.6989 16.5 16.5 16.5H13.5C13.3578 16.4989 13.2189 16.4575 13.0994 16.3804C12.9799 16.3034 12.8847 16.194 12.825 16.065C12.7649 15.9345 12.7436 15.7895 12.7635 15.6472C12.7835 15.505 12.8439 15.3714 12.9375 15.2625L14.4375 13.5H13.5C13.3011 13.5 13.1103 13.421 12.9697 13.2803C12.829 13.1397 12.75 12.9489 12.75 12.75C12.75 12.5511 12.829 12.3603 12.9697 12.2197C13.1103 12.079 13.3011 12 13.5 12H16.0725C16.2146 12.0028 16.353 12.0459 16.4715 12.1244C16.59 12.2028 16.6838 12.3133 16.742 12.4429C16.8002 12.5726 16.8203 12.7162 16.8 12.8568C16.7797 12.9975 16.7199 13.1295 16.6275 13.2375L15.1275 15H16.5C16.6989 15 16.8897 15.079 17.0303 15.2197Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.6,\n })}\n ${this.getPath({\n d: 'M22.2803 10.7197C22.421 10.8603 22.5 11.0511 22.5 11.25C22.5 11.4489 22.421 11.6397 22.2803 11.7803C22.1397 11.921 21.9489 12 21.75 12H18.75C18.6078 11.9989 18.4689 11.9575 18.3494 11.8804C18.2299 11.8034 18.1347 11.694 18.075 11.565C18.0149 11.4345 17.9936 11.2895 18.0135 11.1472C18.0335 11.005 18.0939 10.8714 18.1875 10.7625L19.6875 9H18.75C18.5511 9 18.3603 8.92098 18.2197 8.78033C18.079 8.63968 18 8.44891 18 8.25C18 8.05109 18.079 7.86032 18.2197 7.71967C18.3603 7.57902 18.5511 7.5 18.75 7.5H21.3225C21.4646 7.50281 21.603 7.54594 21.7215 7.62436C21.84 7.70278 21.9338 7.81326 21.992 7.94294C22.0502 8.07262 22.0703 8.21616 22.05 8.35683C22.0297 8.4975 21.9699 8.62952 21.8775 8.7375L20.3775 10.5H21.75C21.9489 10.5 22.1397 10.579 22.2803 10.7197Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.8,\n })}\n ${this.getPath({\n d: 'M16.7816 6.71967C16.9222 6.86032 17.0012 7.05109 17.0012 7.25C17.0012 7.44891 16.9222 7.63968 16.7816 7.78033C16.6409 7.92098 16.4501 8 16.2512 8H11.7512C11.6078 8.00035 11.4672 7.95956 11.3463 7.88246C11.2253 7.80536 11.129 7.69518 11.0687 7.565C11.0087 7.43451 10.9873 7.28951 11.0073 7.14725C11.0272 7.00499 11.0876 6.87144 11.1812 6.7625L14.0012 3.5H11.7512C11.5523 3.5 11.3615 3.42098 11.2209 3.28033C11.0802 3.13968 11.0012 2.94891 11.0012 2.75C11.0012 2.55109 11.0802 2.36032 11.2209 2.21967C11.3615 2.07902 11.5523 2 11.7512 2H15.6062C15.7496 1.99999 15.89 2.04108 16.0107 2.11839C16.1315 2.1957 16.2275 2.30601 16.2875 2.43623C16.3475 2.56645 16.3689 2.71114 16.3491 2.85315C16.3294 2.99516 16.2694 3.12855 16.1762 3.2375L13.3787 6.5H16.2512C16.4501 6.5 16.6409 6.57902 16.7816 6.71967Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CLIPBOARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M8.72732 4.63647H7.45459C6.35002 4.63647 5.45459 5.5319 5.45459 6.63647V19.0001C5.45459 20.1047 6.35002 21.0001 7.45459 21.0001H16.5455C17.6501 21.0001 18.5455 20.1047 18.5455 19.0001V6.63647C18.5455 5.53191 17.6501 4.63647 16.5455 4.63647H15.2728V5.04557C15.2728 5.72337 14.7233 6.27284 14.0455 6.27284H9.95459C9.27679 6.27284 8.72732 5.72337 8.72732 5.04557V4.63647Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.1818 3.81818H10.0454C9.76927 3.81818 9.54541 4.04204 9.54541 4.31818V4.95455C9.54541 5.23069 9.76927 5.45455 10.0454 5.45455H13.9545C14.2306 5.45455 14.4545 5.23069 14.4545 4.95455V4.31818C14.4545 4.04204 14.2306 3.81818 13.9545 3.81818H12.8181C12.8181 3.36631 12.4518 3 12 3C11.5481 3 11.1818 3.36631 11.1818 3.81818Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 8,\n y: 10,\n width: 4,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 8,\n y: 14,\n width: 8,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BULLET_LIST: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M9.5 6.5C9.5 5.67157 10.1716 5 11 5H20C20.8284 5 21.5 5.67157 21.5 6.5C21.5 7.32843 20.8284 8 20 8H11C10.1716 8 9.5 7.32843 9.5 6.5ZM9.5 11.5C9.5 10.6716 10.1716 10 11 10H20C20.8284 10 21.5 10.6716 21.5 11.5C21.5 12.3284 20.8284 13 20 13H11C10.1716 13 9.5 12.3284 9.5 11.5ZM11 15C10.1716 15 9.5 15.6716 9.5 16.5C9.5 17.3284 10.1716 18 11 18H20C20.8284 18 21.5 17.3284 21.5 16.5C21.5 15.6716 20.8284 15 20 15H11Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M6 8C6.82843 8 7.5 7.32843 7.5 6.5C7.5 5.67157 6.82843 5 6 5C5.17157 5 4.5 5.67157 4.5 6.5C4.5 7.32843 5.17157 8 6 8ZM6 13C6.82843 13 7.5 12.3284 7.5 11.5C7.5 10.6716 6.82843 10 6 10C5.17157 10 4.5 10.6716 4.5 11.5C4.5 12.3284 5.17157 13 6 13ZM7.5 16.5C7.5 17.3284 6.82843 18 6 18C5.17157 18 4.5 17.3284 4.5 16.5C4.5 15.6716 5.17157 15 6 15C6.82843 15 7.5 15.6716 7.5 16.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.NOTIFICATIONS_BIT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M14.1618 5.87061C14.0566 6.22877 14.0001 6.60779 14.0001 7C14.0001 8.74164 15.1132 10.2233 16.6668 10.7724V11.8587C16.6668 13.178 17.2448 14.4233 18.2528 15.2753C18.5182 15.5027 18.6668 15.8253 18.6668 16.1667C18.6668 16.81 18.1435 17.3333 17.5002 17.3333H6.50016C5.85683 17.3333 5.3335 16.81 5.3335 16.1667C5.3335 15.8253 5.48216 15.5027 5.7415 15.2807C6.7555 14.4233 7.3335 13.178 7.3335 11.8587V10C7.3335 7.654 9.0755 5.712 11.3335 5.38667V4.66667C11.3335 4.298 11.6322 4 12.0002 4C12.3682 4 12.6668 4.298 12.6668 4.66667V5.38667C13.1991 5.46338 13.7028 5.63 14.1618 5.87061Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getOpenUrlClip(0.3)}\n ${this.getPath({\n d: 'M12.0001 20C13.2074 20 14.2174 19.1393 14.4494 18H9.55078C9.78278 19.1393 10.7928 20 12.0001 20Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getEndUrlClip()}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.SNEAKERS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getRectangle({\n opacity: 0.3,\n x: 2.29688,\n y: 4.05859,\n width: 6.73002,\n height: 13.46,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d:\n 'M 1.33545 13.325 ' +\n 'C 1.33545 13.016 ' +\n '1.57177 12.7596 ' +\n '1.87853 12.7222' +\n 'C6.35443 12.1768 ' +\n '8.53329 10.46623 ' +\n '9.42237 9.51687 ' +\n 'C 9.70192 9.21836 ' +\n '10.2192 9.1756 ' +\n '10.5009 9.47202 ' +\n 'C 10.7876 9.7736 ' +\n '11.1616 10.15966 ' +\n '11.5713 10.56384' +\n 'C 11.5436 10.59924 ' +\n '11.518 10.63702 ' +\n '11.4949 10.67709 ' +\n 'L 10.0527 13.175 ' +\n 'C 9.78724 13.6348 ' +\n '9.9448 14.2228 ' +\n '10.4046 14.4883 ' +\n 'C 10.8645 14.7538 ' +\n '11.4525 14.5962 ' +\n '11.718 14.1364 ' +\n 'L 13.0109 11.897 ' +\n 'C 13.4644 12.2825 ' +\n '13.8931 12.604 ' +\n '14.2347 12.7814 ' +\n 'C 14.3514 12.8421 ' +\n '14.4664 12.9005 ' +\n '14.5796 12.9566 ' +\n 'L 13.8985 14.1364 ' +\n 'C 13.633 14.5962 ' +\n '13.7905 15.1842 ' +\n '14.2504 15.4497 ' +\n 'C 14.7102 15.7152 ' +\n '15.2982 15.5577 ' +\n '15.5637 15.0978 ' +\n 'L 16.3565 13.7247 ' +\n 'C 17.8284 13.2618 ' +\n '18.9067 14.3968 ' +\n '19.6913 14.4951 ' +\n 'C 20.0361 14.5383 ' +\n '20.3242 14.5744 ' +\n '20.5641 14.6344 ' +\n 'C 21.4747 14.862 ' +\n '22.1696 15.6293 ' +\n '22.649 16.3741 ' +\n 'C 23.2069 17.2409 ' +\n '22.717 18.2995 ' +\n '21.7186 18.5561 ' +\n 'C 20.5812 18.8485 ' +\n '18.8943 19.1738 ' +\n '16.6916 19.3075 ' +\n 'C 12.887 19.5385 ' +\n '4.23132 19.3713 ' +\n '1.91473 19.3207 ' +\n 'C 1.58916 19.3136 ' +\n '1.33545 19.048 ' +\n '1.33545 18.7223 ' +\n 'L 1.33545 13.325Z',\n\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOWNLOAD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2 13C2 12.5 2.5 12 3 12C3.5 12 4 12.5 4 13C4 13.5 4 18 4 18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V13C20 12.4477 20.4477 12 21 12C21.5523 12 22 12.4477 22 13V18C22 20.2091 20.2091 22 18 22H6C3.79086 22 2 20.2091 2 18C2 18 2 13.5 2 13Z',\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 13,\n y: 15,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'rotate(-180 13 15)',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M16.2929 9.29289C16.6834 8.90237 17.3166 8.90237 17.7071 9.29289C18.0976 9.68342 18.0976 10.3166 17.7071 10.7071L12.7071 15.7071C12.331 16.0832 11.7264 16.0991 11.331 15.7433L6.33104 11.2433C5.92053 10.8738 5.88725 10.2415 6.25671 9.83103C6.62617 9.42052 7.25845 9.38724 7.66896 9.7567L11.9638 13.622L16.2929 9.29289Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n }\n return undefined;\n }\n\n private getSvgBeginTemplate(\n uniqueId: string,\n width: number,\n height: number,\n viewBox: string,\n color = 'none'\n ): string {\n return ``;\n }\n\n private getSvgEndTemplate(): string {\n return ``;\n }\n\n private getPath(params: ISvgPath): string {\n return ``;\n }\n\n private getRectangle(params: ISvgRectangle): string {\n return ``;\n }\n\n private getCircle(params: ISvgCircle): string {\n return ``;\n }\n\n private getX(x: number): string {\n return isNil(x) ? '' : `x=\"${x}\"`;\n }\n\n private getY(y: number): string {\n return isNil(y) ? '' : `y=\"${y}\"`;\n }\n\n private getColorFill(color: string): string {\n return color ? `fill=\"${color}\"` : '';\n }\n\n private getColorStroke(color: string): string {\n return color ? `stroke=\"${color}\"` : '';\n }\n\n private getStrokeWidth(value: number): string {\n return value ? `stroke-width=\"${value}\"` : '';\n }\n\n private getUrlClip() {\n return ``;\n }\n\n private getOpenUrlClip(opacity) {\n return ``;\n }\n\n private getEndUrlClip() {\n return ``;\n }\n\n private getDefsPart() {\n return ``;\n }\n\n private endDefsPart() {\n return ``;\n }\n\n private getClipPath() {\n return ``;\n }\n\n private endClipPath() {\n return ``;\n }\n\n private getClipPathRect() {\n return ``;\n }\n}\n","\n
    \n
    \n\n\n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\n\nimport { IconService } from './services/icon.service';\n\n@Component({\n selector: 'app-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent extends ComponentAbstract implements OnInit {\n iconTemplate = '';\n @Input() cssIcon = 'icon-container';\n\n constructor(protected cdr: ChangeDetectorRef, private iconService: IconService) {\n super(cdr);\n }\n\n @Input() set svg(icon: EIcon) {\n this.icon = icon;\n this.getIconTemplate();\n }\n\n @Input() set iconHeight(height: number) {\n this.height = height;\n this.getIconTemplate();\n }\n\n @Input() set iconWidth(width: number) {\n this.width = width;\n this.getIconTemplate();\n }\n\n @Input() set iconColor(color: EColorPalette) {\n this.color = color;\n this.getIconTemplate();\n }\n\n @Input() set iconSecondColor(color: EColorPalette) {\n this.secondColor = color;\n this.getIconTemplate();\n }\n\n icon: EIcon;\n width: number;\n height: number;\n color: EColorPalette;\n secondColor: EColorPalette;\n\n ngOnInit(): void {\n this.getIconTemplate();\n }\n\n private getIconTemplate() {\n if (this.icon) {\n this.iconTemplate = this.iconService.getIconTemplate(\n this.icon,\n this.width,\n this.height,\n this.color,\n this.secondColor\n );\n this.cdr.markForCheck();\n }\n }\n}\n","import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\n@Directive({\n selector: '[appAutoresize]',\n})\nexport class AutoresizeDirective implements AfterViewInit {\n @Input() maxHeight: number;\n @Input() appAutoresize: boolean;\n @Input() formControl: UntypedFormControl;\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n this.resize();\n\n this.formControl.valueChanges.subscribe(() => {\n this.resize();\n });\n }\n\n resize() {\n if (!this.appAutoresize) return;\n\n const textArea = this.elementRef.nativeElement;\n let newHeight;\n\n textArea.style.height = 'auto';\n if (this.maxHeight) {\n newHeight = Math.min(textArea.scrollHeight, this.maxHeight);\n } else {\n newHeight = textArea.scrollHeight;\n }\n textArea.style.height = newHeight + 4 + 'px';\n }\n}\n","
    \n
    \n \n
    \n maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value ? 'filled' : ''\n ]\"\n [formControl]=\"control\"\n [placeholder]=\"attrPlaceholder\"\n [name]=\"attrName\"\n [attr.aria-invalid]=\"invalid && showValidationError\"\n (blur)=\"onBlur()\"\n >\n
    \n maxCounter ? 'red3' : ''\"\n >\n [{{ control?.value?.length || 0 }}/{{ maxCounter }}]\n
    \n
    \n \n
    \n
    \n\n\n\n
    \n
    ctr/cmd + enter: new line
    \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, ValidationErrors } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged, tap } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-input-area',\n templateUrl: './input-area.component.html',\n styleUrls: ['./input-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class InputAreaComponent extends CustomControlAbstract implements OnInit, OnDestroy, ControlValueAccessor {\n errors: ValidationErrors;\n invalid = false;\n disabled = false;\n\n @Input() autoresize = false;\n @Input() maxHeight: number;\n @Input() displayNewLineHint = false;\n @Input() attrPlaceholder = '';\n @Input() attrName: string;\n @Input() label: string;\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() contentCss = 'display-flex align-items-start';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = '';\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() labelRequired = false;\n @Input() displayCounter = false;\n @Input() maxCounter: number;\n @Output() keydownEnterEvent = new EventEmitter();\n @Output() blurEvent = new EventEmitter();\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable();\n } else {\n this.control.enable();\n }\n this.disabled = attrDisable;\n this.cdr.detectChanges();\n }\n\n @Input() set value(value: string) {\n this.control.setValue(value);\n }\n\n ngOnInit(): void {\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(value => {\n this.onChanged(value);\n this.onTouched();\n })\n )\n .subscribe();\n\n this.control.statusChanges\n .pipe(\n untilDestroyed(this),\n tap(status => {\n this.checkControlStatus(this.ngControl.control.status);\n })\n )\n .subscribe();\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n this.ngControl.control.statusChanges\n .pipe(\n untilDestroyed(this),\n tap(status => {\n this.checkControlStatus(status);\n })\n )\n .subscribe();\n }\n }\n\n ngOnDestroy(): void {}\n\n writeValue(value: any): void {\n this.control.setValue(value);\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n\n enter($event) {\n if (this.keydownEnterEvent.observed) {\n this.keydownEnterEvent.emit();\n $event.preventDefault();\n }\n }\n\n insertNewline($event) {\n const newValue = `${this.control?.value || ''}\\n`;\n this.control.setValue(newValue);\n }\n}\n","
    \n \n
    \n\n\n
    \n {{ itemMessage }}\n
    \n
    \n\n\n
    \n {{ message }}\n
    \n
    \n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\nimport { InputErrorService } from '@app/modules/ui-components/components/input-error/services/input-error.service';\n\n@Component({\n selector: 'app-input-error',\n templateUrl: './input-error.component.html',\n styleUrls: ['./input-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputErrorComponent implements OnInit {\n @Input() errors: ValidationErrors;\n @Input() visible = false;\n @Input() message = '';\n @Input() containerCss = '';\n\n constructor(private inputErrorService: InputErrorService) {}\n\n ngOnInit(): void {}\n\n get validationMessages(): string[] {\n return this.visible && this.errors\n ? (Object.entries(this.errors) || [])\n .filter(([key, errorParams]) => !!errorParams)\n .map(([key, errorParams]) => {\n return this.inputErrorService.getValidationMessage(key, errorParams);\n })\n : [];\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class InputErrorService {\n constructor() {}\n\n getValidationMessage(validator: string, errorParams: unknown): string {\n switch (validator) {\n case 'dateRangeError': {\n return 'Wrong date range';\n }\n case 'numberRangeError': {\n return 'Wrong number range';\n }\n case 'regexpError': {\n return 'Wrong format';\n }\n case 'max': {\n return 'Value too large';\n }\n case 'min': {\n return 'Value too small';\n }\n case 'digitsPositive': {\n return 'Only positive digits are allowed';\n }\n case 'digits': {\n return 'Only digits are allowed';\n }\n case 'required': {\n return '* required field';\n }\n case 'atLeastOnePhotoRequired': {\n return 'At least one photo is required';\n }\n case 'maxlength': {\n const error = errorParams as { actualLength: number; requiredLength: number };\n return `Max text length is ${error.requiredLength}`;\n }\n case 'minlength': {\n const error = errorParams as { actualLength: number; requiredLength: number };\n return `Minimum text length is ${error.requiredLength}`;\n }\n case 'kpiTaskRange': {\n return 'Wrong data range';\n }\n case 'laterThanToday': {\n return 'Due date must be later than today date ';\n }\n case 'urlGoogleDrive': {\n return 'Incorrect Google Drive URL';\n }\n case 'email': {\n return 'Incorrect email address';\n }\n case 'atLeastOneItemRequired': {\n return 'At least one item is required';\n }\n case 'url': {\n return 'Incorrect URL address';\n }\n\n case 'stepBeforeEnd': {\n return '\"Due date\" must be earlier than turnover end date';\n }\n\n case 'stepAfterStart': {\n return '\"Due date\" must be later than turnover start date';\n }\n\n case 'duplicatedRole': {\n return 'A role with the given name already exists';\n }\n\n case 'duplicatedFinish': {\n return 'A finish with the given name already exists';\n }\n\n case 'userAlreadyExists': {\n return 'User already exists';\n }\n case 'userInactive': {\n return \"User with provided email was recently removed and can't be used again\";\n }\n\n case 'elapsedDaysRangeEmpty': {\n return 'Empty range';\n }\n\n case 'elapsedDaysRangeEmptyLow': {\n return 'Empty low priority value';\n }\n\n case 'elapsedDaysRangeEmptyHigh': {\n return 'Empty high priority value';\n }\n\n case 'elapsedDaysRangeHigh': {\n return \"Value in 'high priority' field must be lover, than 'low priority' field\";\n }\n\n case 'elapsedDaysRangeLow': {\n return \"Value in 'low priority' field must be lover, than 'high priority' field\";\n }\n\n case 'customError': {\n if (typeof errorParams === 'string') {\n return errorParams;\n }\n return '';\n }\n\n default: {\n return '';\n }\n }\n }\n}\n","
    \n
    \n \n
    \n
    \n
    \n maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value || control.value === 0 ? 'filled' : '',\n disabled ? 'disabled' : ''\n ]\"\n [attr.aria-invalid]=\"errors && showValidationErrorOrSubmitted\"\n >\n maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value || control.value === 0 ? 'filled' : '',\n disabled ? 'disabled' : ''\n ]\"\n matInput\n [type]=\"attrType\"\n [formControl]=\"control\"\n [placeholder]=\"attrPlaceholder\"\n [name]=\"attrName\"\n [autocomplete]=\"attrAutocomplete ? 'on' : 'off'\"\n [mask]=\"attrMask\"\n [readonly]=\"readonly\"\n [thousandSeparator]=\"attrThousandSeparator\"\n [dropSpecialCharacters]=\"attrDropSpecialCharacters\"\n [validation]=\"true\"\n [attr.aria-invalid]=\"(errors && showValidationErrorOrSubmitted) || markAsInvalid\"\n (blur)=\"onBlur($event)\"\n (keydown.enter)=\"keydownEnter($event)\"\n />\n {{ prefix }}\n \n
    \n maxCounter ? 'red3' : ''\"\n >\n [{{ control?.value?.length || 0 }}/{{ maxCounter }}]\n
    \n \n
    \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class InputComponent extends CustomControlAbstract implements OnInit, OnDestroy, ControlValueAccessor {\n disabled = false;\n\n @Input() prefix: string;\n @Input() attrPlaceholder: string;\n @Input() attrName: string;\n @Input() attrLabel: string;\n @Input() attrType = 'text';\n @Input() labelCss = 'label-input body-small-bold';\n @Input() contentCss = 'display-flex align-items-start flex-column';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = 'display-flex align-items-center';\n @Input() attrAutocomplete = false;\n @Input() attrMask = '';\n @Input() attrThousandSeparator = '';\n @Input() attrDropSpecialCharacters = null;\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() labelRequired: boolean;\n @Input() displayCounter = false;\n @Input() maxCounter = 100;\n @Input() readonly = false;\n\n @Output() blurEvent = new EventEmitter();\n @Output() keydownEnterEvent = new EventEmitter();\n @ViewChild('inputControl', { read: ElementRef }) inputControl: ElementRef;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable();\n } else {\n this.control.enable();\n }\n this.control.markAsUntouched();\n this.control.markAsPristine();\n this.disabled = attrDisable;\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as FormControl;\n\n if (typeof this.labelRequired === 'undefined') {\n this.labelRequired = this.control.hasValidator(Validators.required);\n }\n }\n\n this.control.statusChanges.pipe(untilDestroyed(this)).subscribe(status => this.checkControlStatus(status));\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n\n setTimeout(() => this.cdr.detectChanges());\n }\n\n ngOnDestroy(): void {}\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n onBlur($event: FocusEvent) {\n this.blurEvent.emit($event);\n this.onTouched();\n }\n\n focus() {\n this.inputControl?.nativeElement.focus();\n }\n\n keydownEnter($event: Event) {\n if (this.control.value) {\n $event.stopPropagation();\n $event.preventDefault();\n this.keydownEnterEvent.emit($event);\n }\n }\n\n removeFocus() {\n this.inputControl.nativeElement.blur();\n }\n}\n","
    \n \n \n \n \n \n \n \n
    \n Select All\n   \n Clear All\n
    \n
    \n
    \n\n \n \n {{ addNewLabel }}\n \n \n\n \n
    \n {{ displayValue | escapeHtml }}\n
    \n
    \n\n \n
    \n {{ displayValue }}\n
    \n
    \n\n \n\n \n \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n\n \n \n \n \n \n \n
    \n \n\n\n\n
    \n \n {{ label }}\n \n \n
    \n
    \n\n\n \n\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, UntypedFormControl, Validators } from '@angular/forms';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { find, isEmpty, isNil, isUndefined, sortBy } from 'lodash';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { ValueLabelPair } from '@shared/interfaces/value-label-pair.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-radio-button-dropdown',\n templateUrl: './radio-button-dropdown.component.html',\n styleUrls: ['./radio-button-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class RadioButtonDropdownComponent\n extends CustomControlAbstract\n implements OnInit, DoCheck, OnDestroy, ControlValueAccessor, AfterContentChecked\n{\n displayValue = '';\n private readonly labelInsideDefaultCss = 'nowrap pre-title';\n private readonly labelOutsideDefaultCss = 'nowrap body-small-bold';\n controlItems: IRadioButtonOption[] = [];\n controlSectionItems: IRadioButtonOption[][] = [];\n transformValueList: IRadioButtonOption[] = [];\n hasValue = false;\n\n @Input() selectCss = 'body-small text-color dark';\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n\n return this.labelInside ? this.labelInsideDefaultCss : this.labelOutsideDefaultCss;\n }\n\n private _valueCss: string;\n @Input() set valueCss(value) {\n this._valueCss = value;\n }\n get valueCss() {\n if (this._valueCss) {\n return this._valueCss;\n }\n return 'ellipsis text-color dark ' + (this.labelInside ? '' : 'body-small');\n }\n\n private _optionCss: string;\n @Input() set optionCss(value) {\n this._optionCss = value;\n }\n get optionCss() {\n if (this._optionCss) {\n return this._optionCss;\n }\n return 'fade-truncate w-100 text-color dark ' + (this.labelInside ? 'pre-option' : 'body-small');\n }\n\n @Input() containerWidthCss = '';\n @Input() containerCss = 'display-flex align-items-center';\n @Input() label = '';\n @Input() labelTooltip = '';\n @Input() icon: EIcon;\n @Input() iconCss = 'dropdown-icon';\n @Input() iconTooltip = '';\n @Input() attrPlaceholder = '';\n @Input() onSelectValueContent: ValueLabelPair;\n // temporary for deprecated values (see MoveOutType)\n @Input() unsupportedValueLabel = 'select value';\n /*\n * issue available https://github.com/ng-select/ng-select/issues/2055\n * known workaround - https://github.com/Kyotu-Technology/noetic-frontend/pull/455\n */\n @Input() highlightWhenActive = false;\n @Input() attrAppendTo = '';\n @Input() allowSelectAll = false;\n @Input() multiSelect = false;\n @Input() attrDisable = false;\n @Input() labelInside = false;\n @Input() markAsInvalid = false;\n @Input() allowClear = true;\n @Input() allowSearch = true;\n @Input() displayLabelAsValue = true;\n @Input() labelRequired;\n @Input() showEmptyValue = false;\n @Input() activeOnFocus = false;\n @Input() errorSection = true;\n // TODO: move autoSortList to setter\n // otherwise parameters order matters\n @Input() autoSortList = true;\n\n @Input() set items(items: IRadioButtonOption[] | IRadioButtonOption[][]) {\n this.controlSectionItems = [];\n this.controlItems = [];\n this.transformValueList = [];\n\n if (Array.isArray(items?.[0])) {\n this.controlSectionItems = (items as IRadioButtonOption[][]).map(section => this.sortSection(section));\n this.transformValueList = this.controlSectionItems.flat();\n } else {\n this.controlItems = this.sortSection(items as IRadioButtonOption[]);\n this.transformValueList = [...this.controlItems];\n }\n this.transformValue();\n }\n @Input() set listLoading(listLoading: boolean) {\n this._listLoading = listLoading;\n this.cdr.markForCheck();\n }\n @Input() customListItemTemplate: TemplateRef;\n\n @Input() allowAddNew = false;\n @Input() addNewLabel = '+ Add new item';\n @Output() addNewClicked = new EventEmitter();\n\n _labelCss = '';\n _listLoading = false;\n labelWidth: string;\n _labelElement: ElementRef;\n _focused = false;\n\n @ViewChild(NgSelectComponent) ngSelect: NgSelectComponent;\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n\n this._labelElement = value;\n this.labelWidth = `${value?.nativeElement?.clientWidth}px`;\n this.cdr.detectChanges();\n }\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngDoCheck(): void {\n //It's obligatory as we can change reactive control that is binding with this control\n if (this.ngControl?.control && this.control !== this.ngControl.control) {\n this.initControl();\n }\n }\n\n ngAfterContentChecked(): void {\n if (!this.labelInside || !this._labelElement) return;\n\n this.labelWidth = `${this._labelElement?.nativeElement?.clientWidth}px`;\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.initControl();\n }\n\n private sortSection(items: IRadioButtonOption[]) {\n return items?.length\n ? this.autoSortList\n ? sortBy(items as IRadioButtonOption[], [item => item.sort, item => item.label?.toLowerCase()])\n : (items as IRadioButtonOption[]) || []\n : [];\n }\n\n private initControl() {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as UntypedFormControl;\n\n if (typeof this.labelRequired === 'undefined') {\n this.labelRequired = this.control.hasValidator(Validators.required);\n }\n }\n\n this.transformValue();\n this.control.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => this.transformValue());\n this.control.statusChanges.pipe(untilDestroyed(this)).subscribe(status => this.checkControlStatus(status));\n this.listenControlTouched(this.control)\n .pipe(untilDestroyed(this))\n .subscribe(() => this.cdr.markForCheck());\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n }\n\n searchFunction(term: string, value: T): boolean {\n term = term.toLowerCase();\n const item = find(this.transformValueList, { value }) as IRadioButtonOption;\n return item?.label?.toLowerCase()?.indexOf(term) > -1;\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n this.transformValue();\n }\n\n valueChange(value: T) {\n this.onChanged(value);\n }\n\n ngOnDestroy(): void {}\n\n private transformValue() {\n const value = this.control?.value;\n const hasValue = Array.isArray(value) ? !isEmpty(value) : !isNil(value);\n if (hasValue || this.showEmptyValue) {\n this.hasValue = true;\n if (Array.isArray(value)) {\n if (value.length > 1) {\n this.displayValue = this.onSelectValueContent\n ? this.getCustomTransformValue(value.length)\n : `${value.length} item${value.length > 1 ? 's' : '' + ''}`;\n } else {\n const displayValue = this.transformValueList?.find(item => item.value === value[0])?.label;\n this.displayValue = isUndefined(displayValue) ? this.unsupportedValueLabel : displayValue;\n }\n } else if (this.displayLabelAsValue) {\n const displayValue = this.transformValueList?.find(item => item.value === value)?.label;\n this.displayValue = isUndefined(displayValue) ? this.unsupportedValueLabel : displayValue;\n } else {\n this.displayValue = value;\n }\n } else {\n this.hasValue = false;\n }\n\n this.cdr.detectChanges();\n }\n\n private getCustomTransformValue(count: number): string {\n if (!count) {\n return '';\n }\n\n return (count > 1 ? this.onSelectValueContent.multiple : this.onSelectValueContent.single).replace(\n this.onSelectValueContent.mask,\n `${count}`\n );\n }\n\n onSelectAll() {\n this.control.patchValue(this.controlItems.map(t => t.value));\n this.cdr.detectChanges();\n }\n\n onClearAll() {\n this.control.patchValue([]);\n this.cdr.detectChanges();\n }\n\n onAddNew() {\n this.addNewClicked.emit();\n this.ngSelect.close();\n this.cdr.detectChanges();\n }\n}\n","
    \n \n \n \n
    \n
    \n
    \n \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControlStatus, FormGroupDirective, NgControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { isNil } from 'lodash';\nimport { tap } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { getActiveValidationErrorFunction } from '@shared/functions/get-active-validation-error.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-radio-button',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class RadioButtonComponent\n extends CustomControlAbstract\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n disabled = false;\n\n @Input() label = '';\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() items: IRadioButtonOption[] = [];\n @Input() labelRequired = false;\n @Input() radioGroupClass = 'display-flex';\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable();\n } else {\n this.control.enable();\n }\n this.disabled = attrDisable;\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.checkIfEmpty();\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n tap((value: any) => {\n this.setValue(value);\n this.checkIfEmpty();\n })\n )\n .subscribe();\n\n this.control.statusChanges\n .pipe(\n untilDestroyed(this),\n tap(status => this.checkControlStatus(status))\n )\n .subscribe();\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n this.ngControl.control.statusChanges\n .pipe(\n untilDestroyed(this),\n tap(status => this.checkControlStatus(status))\n )\n .subscribe();\n }\n }\n\n writeValue(value: any): void {\n this.control.setValue(value);\n }\n\n setValue(value: unknown) {\n if (this.ngControl.control.disabled) {\n return;\n }\n this.onChanged(value);\n this.onTouched();\n }\n\n ngOnDestroy(): void {}\n\n protected checkControlStatus(status: FormControlStatus) {\n super.checkControlStatus(status);\n this.checkIfEmpty();\n }\n\n /**\n *\n * @private\n * This method checks empty value if labelRequired params is set as true.\n * Its only visual designation - does not change the status of the control as valid or invalid\n */\n\n private checkIfEmpty() {\n const isEmpty = isNil(this.control?.value);\n this.isEmptyValue = this.labelRequired ? isEmpty : false;\n this.errors = getActiveValidationErrorFunction({\n ...this.ngControl?.control?.errors,\n ...{ required: this.isEmptyValue },\n });\n this.cdr.detectChanges();\n }\n}\n","import { ValidationErrors } from '@angular/forms';\nimport { isEmpty } from 'lodash';\n\nexport function getActiveValidationErrorFunction(errors: ValidationErrors): ValidationErrors {\n const activeErrors: ValidationErrors = {};\n (Object.entries(errors) || [])\n .filter(([key, errorParams]) => !!errorParams)\n .forEach(([key, errorParams]) => {\n activeErrors[key] = errorParams;\n });\n return isEmpty(activeErrors) ? null : activeErrors;\n}\n","
    \n \n
    \n \n
    \n
    \n\n\n
    \n {{ value || emptyValue }}\n
    \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, TemplateRef } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\n@Component({\n selector: 'app-read-only-field',\n templateUrl: './read-only-field.component.html',\n styleUrls: ['./read-only-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ReadOnlyFieldComponent extends ComponentAbstract implements OnInit {\n @Input() containerCss = 'display-flex flex-column';\n @Input() label = '';\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() value: unknown;\n @Input() emptyValue = '–';\n @Input() valueContainerCss = 'value-container h-40';\n @Input() valueCss = 'ellipsis body-small text-color dark';\n @Input() customValue: TemplateRef;\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkeletonLoaderService {\n private static uniqueSkeletonId = -1;\n uniqueId = '';\n\n constructor() {}\n\n getLoaderId(): string {\n return `${++SkeletonLoaderService.uniqueSkeletonId}`;\n }\n}\n","import { createSelector } from '@ngrx/store';\n\nimport { selectCoreModule } from '@shared/selectors/core.selector';\n\nimport { windowResizeFeatureKey } from '../reducers/window-resize.reducer';\n\nexport const selectWindowResizeState = createSelector(selectCoreModule, coreState => coreState[windowResizeFeatureKey]);\n\n/**\n * select Window Width\n */\nexport const selectWindowWidth = createSelector(\n selectWindowResizeState,\n windowResizeState => windowResizeState.windowWidth\n);\n","
    \n \n Loading...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n \n
    \n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { debounceTime, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { LoaderType } from '@shared/enums/loader-type';\nimport { selectWindowWidth } from '@shared/selectors/window-resize.selectors';\nimport { SkeletonLoaderService } from '@ui-components/components/skeleton-loader/services/skeleton-loader.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-skeleton-loader',\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonLoaderComponent extends ComponentAbstract implements OnInit, OnDestroy, AfterViewInit {\n readonly containerPadding = 10;\n readonly listTemplateItemOffset = 50;\n readonly listSections = Array(40).fill(0);\n readonly boardSections = Array(9).fill(0);\n readonly kanbanSections = Array(8).fill(0);\n readonly kanbanRowSections = Array(30).fill(0);\n readonly commentItems = Array(3).fill(0);\n readonly recSectionAttachmentsItems = Array(3).fill(0);\n readonly listOffset = 6;\n readonly listItemOffset = 50;\n readonly tileOffset = 4;\n readonly kanbanTitleYPos = 5;\n readonly kanbanTitleYPosOffset = 25;\n\n readonly boardItemOffset = 55;\n readonly boardOffset = 15;\n\n readonly systemConfigSections = Array(4).fill(0);\n readonly systemConfigLabelOffset = 6;\n readonly systemConfigControlOffset = 20;\n readonly systemConfigSectionOffset = 50;\n\n loaderId = '';\n clipPathUrl = '#';\n clipPath = '';\n fill = '';\n\n viewBox = '0 0 300 200';\n\n svgViewportWidth = 300;\n svgViewportHeight = 200;\n\n listTemplateWidth = 0;\n\n pieChartTitleWidth = 200;\n pieChartTitleX = 100;\n pieChartLegendDotX = 230;\n pieChartLegendItemX = 250;\n cXPosition = 140;\n cYPosition = 140;\n cRadius = 70;\n\n kanbanTitleSectionWidth = 40;\n kanbanTileHeight = 50;\n kanbanTileWidth = 100;\n kanbanTileXOffset = 104;\n kanbanTileYOffset = 54;\n\n detailsSingleHeight = 100;\n detailsSingleWidth = 100;\n\n commentListCYOffset = 20;\n commentListAuthorOffset = 6;\n commentListDateOffset = 5;\n commentListCommentOffset = 24;\n commentListItemsOffset = 70;\n commentListCommentWidth = 100;\n\n recSectionVendorWidth = 100;\n recSectionAttachmentsWidth = 100;\n recSectionAttachmentsBtnWidth = 100;\n recSectionAttachmentsBtnOffset = 100;\n recSectionExpWidth = 100;\n recSectionNoteWidth = 100;\n recSectionVendorsItemsXOffset = 100;\n recSectionVendorsItemsYOffset = 25;\n recSectionVendorsItemsWidth = 100;\n\n _loader: LoaderType = LoaderType.List;\n\n @Input() containerCss = 'align-items-center justify-content-center display-flex h-100 w-100';\n\n @Input() set loaderType(loaderType: LoaderType) {\n this._loader = loaderType;\n this.cdr.detectChanges();\n }\n\n @ViewChild('container', { read: ElementRef }) container: ElementRef;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private skeletonLoaderService: SkeletonLoaderService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.loaderId = this.skeletonLoaderService.getLoaderId();\n this.clipPathUrl = `url(#clip-path${this.loaderId})`;\n this.clipPath = `clip-path${this.loaderId}`;\n this.fill = `fill${this.loaderId}`;\n this.updateWidthParams();\n\n this.store\n .select(selectWindowWidth)\n .pipe(\n untilDestroyed(this),\n debounceTime(50),\n tap(() => {\n this.updateWidthParams();\n })\n )\n .subscribe();\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.updateWidthParams();\n }, 1);\n }\n\n ngOnDestroy(): void {}\n\n private updateWidthParams() {\n if (this.container) {\n const containerWidth = this.container?.nativeElement.clientWidth;\n const containerHeight = this.container?.nativeElement.clientHeight;\n\n this.svgViewportWidth = Math.max(0, containerWidth - 2 * this.containerPadding);\n this.svgViewportHeight = Math.max(0, containerHeight - 2 * this.containerPadding);\n\n if (this.svgViewportWidth < 0 || this.svgViewportHeight < 0) {\n return;\n }\n\n this.viewBox = `0 0 ${this.svgViewportWidth} ${this.svgViewportHeight}`;\n\n switch (this._loader) {\n case LoaderType.List:\n {\n this.listTemplateWidth = this.svgViewportWidth - this.listTemplateItemOffset;\n }\n break;\n case LoaderType.PieChart:\n {\n this.pieChartTitleWidth = this.svgViewportWidth / 4;\n this.pieChartTitleX = this.svgViewportWidth / 2.67;\n\n this.cYPosition = this.svgViewportHeight * 0.5;\n this.cXPosition = this.svgViewportWidth * 0.4;\n this.cRadius = this.svgViewportHeight * 0.3;\n\n this.pieChartLegendDotX = this.cXPosition + this.cRadius + 20;\n this.pieChartLegendItemX = this.pieChartLegendDotX + 20;\n }\n break;\n case LoaderType.Kanban:\n {\n this.kanbanTitleSectionWidth = this.svgViewportWidth / (this.kanbanSections.length - 1);\n this.kanbanTileWidth =\n (this.svgViewportWidth - (this.kanbanSections.length - 1) * this.tileOffset) / this.kanbanSections.length;\n this.kanbanTileXOffset = this.kanbanTileWidth + this.tileOffset;\n }\n break;\n case LoaderType.Details_Single:\n {\n this.detailsSingleHeight = this.svgViewportHeight;\n this.detailsSingleWidth = this.svgViewportWidth;\n }\n break;\n case LoaderType.Comment_List:\n {\n this.commentListCommentWidth = this.svgViewportWidth * 0.8;\n }\n break;\n case LoaderType.Recipients_Section:\n {\n this.recSectionVendorWidth = this.svgViewportWidth * 0.2;\n this.recSectionAttachmentsWidth = this.svgViewportWidth * 0.2;\n this.recSectionAttachmentsBtnWidth = this.svgViewportWidth * 0.05;\n this.recSectionAttachmentsBtnOffset = this.svgViewportWidth * 0.1 + 80;\n this.recSectionExpWidth = this.svgViewportWidth * 0.1;\n this.recSectionNoteWidth = this.svgViewportWidth * 0.48;\n this.recSectionVendorsItemsXOffset = this.svgViewportWidth * 0.85;\n this.recSectionVendorsItemsWidth = this.svgViewportWidth * 0.1;\n }\n break;\n }\n\n this.cdr.detectChanges();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n NgModel,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-slide-toggle',\n templateUrl: './slide-toggle.component.html',\n styleUrls: ['./slide-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [CommonModule, MatSlideToggleModule, ReactiveFormsModule, MatTooltipModule],\n})\nexport class SlideToggleComponent\n extends CustomControlAbstract\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n @Input() attrRightLabel: string;\n @Input() attrLeftLabel: string;\n @Input() labelCss = 'body-small';\n @Input() containerCss = 'display-flex grid-gap-8 align-items-center';\n @Input() activeBold = false;\n @Input() tooltip: string;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as UntypedFormControl;\n }\n\n if (this.ngControl instanceof NgModel) {\n this.control.valueChanges.pipe(untilDestroyed(this)).subscribe(value => {\n if ((this.ngControl.control as unknown as { _pendingChange: boolean })._pendingChange) {\n this.ngControl.viewToModelUpdate(value);\n }\n });\n }\n\n this.control.statusChanges.pipe(untilDestroyed(this)).subscribe(status => this.checkControlStatus(status));\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n }\n\n ngOnDestroy(): void {}\n\n writeValue(value: boolean): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n valueChange(value: boolean) {\n this.onChanged(value);\n }\n\n setValue(value: boolean) {\n if (this.ngControl?.control?.disabled) {\n return;\n }\n this.onChanged(value);\n this.onTouched();\n }\n}\n","
    \n \n \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\n@Component({\n selector: '[app-table-empty-content]',\n templateUrl: './table-empty-content.component.html',\n styleUrls: ['./table-empty-content.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class TableEmptyContentComponent extends ComponentAbstract implements OnInit {\n @Input() message = 'No data available';\n @Input() attrColspan = 1;\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n}\n","\n
    \n {{ message }}\n
    \n\n","
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    --- vendors ---
    \n
    \n \n \n \n\n \n
    \n {{ displayValue | escapeHtml }}\n
    \n
    \n \n
    \n \n\n \n
    \n {{ label }}\n
    \n
    \n\n \n
    \n
    \n \n
    \n\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { find } from 'lodash';\nimport { distinctUntilChanged } from 'rxjs';\n\nimport { CustomControlAbstract } from '@app/components/abstract/custom-control.abstract';\nimport { getUserList } from '@shared/functions/get-user-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { EnumerationValuePipe } from '@shared/pipes/enumeration-value.pipe';\n\n@UntilDestroy()\n@Component({\n selector: 'app-user-select-dropdown',\n templateUrl: './user-select-dropdown.component.html',\n styleUrls: ['./user-select-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class UserSelectDropdownComponent\n extends CustomControlAbstract\n implements OnInit, OnDestroy, ControlValueAccessor, AfterContentChecked\n{\n displayValue = '';\n userList: IRadioButtonOption[] = [];\n vendorList: IRadioButtonOption[] = [];\n hasValue = false;\n readonly labelInsideDefaultCss = 'nowrap pre-title';\n readonly labelOutsideDefaultCss = 'nowrap body-small-bold';\n\n @Input() selectCss = 'body-small text-color dark';\n @Input() containerWidthCss = '';\n @Input() showChevron = true;\n\n _labelCss = '';\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n\n return this.labelInside ? this.labelInsideDefaultCss : this.labelOutsideDefaultCss;\n }\n\n @Input() containerCss = 'display-flex align-items-center';\n @Input() label = '';\n @Input() attrPlaceholder = '';\n @Input() allowClear = true;\n @Input() allowSearch = true;\n @Input() highlightWhenActive = false;\n @Input() attrDisable = false;\n @Input() labelInside = false;\n @Input() labelRequired = false;\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() userData: UserData;\n @Input() showMyOption = false;\n @Input() showAllOption = false;\n @Input() myLabel = 'My Tasks';\n @Input() allLabel = 'All Tasks';\n /*\n * issue available https://github.com/ng-select/ng-select/issues/2055\n * known workaround - https://github.com/Kyotu-Technology/noetic-frontend/pull/455\n */\n @Input() attrAppendTo = '';\n\n private _valueCss: string;\n @Input() set valueCss(value) {\n this._valueCss = value;\n }\n get valueCss() {\n if (this._valueCss) {\n return this._valueCss;\n }\n return 'ellipsis text-color dark ' + (this.labelInside ? '' : 'body-small');\n }\n\n private _optionCss: string;\n @Input() set optionCss(value) {\n this._optionCss = value;\n }\n get optionCss() {\n if (this._optionCss) {\n return this._optionCss;\n }\n return 'ellipsis text-color dark ' + (this.labelInside ? 'pre-option' : 'body-small');\n }\n\n @Input() set users(users: RestUserModel[]) {\n if (!!users) {\n this.prepareUsersList(users);\n }\n }\n\n _listLoading = false;\n @Input() set listLoading(listLoading: boolean) {\n this._listLoading = listLoading;\n this.cdr.detectChanges();\n }\n\n get myOptionItem(): IRadioButtonOption | null {\n if (!this.showMyOption || !this.userData || this.userData.id === this.control.value) {\n return null;\n }\n\n return {\n value: this.userData?.id,\n label: this.myLabel,\n };\n }\n\n get allOptionItem(): IRadioButtonOption | null {\n if (!this.showAllOption || !this.control.value) {\n return null;\n }\n\n return {\n value: -1,\n label: this.allLabel,\n };\n }\n\n labelWidth = '';\n _labelElement: ElementRef;\n\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n\n this._labelElement = value;\n this.labelWidth = `${value?.nativeElement?.clientWidth}px`;\n this.cdr.detectChanges();\n }\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n private enumerationValuePipe: EnumerationValuePipe,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngAfterContentChecked(): void {\n if (!this.labelInside || !this._labelElement) return;\n\n this.labelWidth = `${this._labelElement?.nativeElement?.clientWidth}px`;\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as FormControl;\n }\n\n this.transformValue(this.control?.value);\n this.control.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => this.transformValue(value));\n this.control.statusChanges.pipe(untilDestroyed(this)).subscribe(status => this.checkControlStatus(status));\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n }\n\n searchFunction(term: string, value: number): boolean {\n term = term.toLowerCase();\n const bothLists = this.userList.concat(this.vendorList);\n const item = find(bothLists, { value });\n return item?.label?.toLowerCase()?.indexOf(term) > -1;\n }\n\n ngOnDestroy(): void {}\n\n writeValue(value: number): void {\n this.transformValue(value);\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n private prepareUsersList(users: RestUserModel[]) {\n this.userList = [];\n this.vendorList = [];\n\n const userListRaw = [];\n const vendorListRaw = [];\n\n users.forEach(user => {\n switch (user.userGroupType) {\n case this.UserType.Employee:\n {\n userListRaw.push(user);\n }\n break;\n case this.UserType.Contractor:\n {\n vendorListRaw.push(user);\n }\n break;\n }\n });\n this.userList = getUserList(userListRaw).sort((a, b) => a.label.localeCompare(b.label));\n this.vendorList = getUserList(vendorListRaw).sort((a, b) => a.label.localeCompare(b.label));\n this.transformValue(this.control.value);\n }\n\n private transformValue(value: number) {\n if (value === -1) {\n this.displayValue = this.allLabel;\n } else if (this.userData?.id === value) {\n this.displayValue = this.myLabel;\n } else {\n this.hasValue = !!value;\n if (this.userList.length || this.vendorList.length) {\n const userName = `${this.enumerationValuePipe.transform(value, this.userList, true)}`;\n const vendorName = `${this.enumerationValuePipe.transform(value, this.vendorList, true)}`;\n\n this.displayValue = userName || vendorName || '';\n }\n }\n this.cdr.detectChanges();\n }\n}\n","import { MatDialogConfig } from '@angular/material/dialog';\n\nexport const DefaultModalConfigConstant: MatDialogConfig = {\n autoFocus: false,\n width: '618px',\n};\n","export enum DialogResult {\n Fail,\n Success,\n}\n","
    \n

    \n {{ data.showDoNotShowAgain ? 'Save template?' : 'Save template' }}\n

    \n \n
    \n You have changed this template. If you do NOT save, your changes will affect only this cell. If you DO save it\n will affect all unstarted inspections in this column.\n
    \n \n\n
    \n \n Don't save\n \n \n \n \n\n \n Save template\n \n \n \n \n
    \n\n Don't show for this column again\n \n
    \n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport {\n RestCustomInspectionContentItemModel,\n RestCustomInspectionModel,\n} from '@main-application/boards/interfaces/custom-inspection';\nimport { CustomInspectionService } from '@main-application/boards/services/custom-inpection.service';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { InputComponent } from '@ui-components/components/input/input.component';\n\nexport interface CustomInspectionSaveTemplateDialogData {\n inspectionTemplate: RestCustomInspectionModel;\n inspectionTemplateContent: RestCustomInspectionContentItemModel[];\n showDoNotShowAgain?: boolean;\n}\n\nexport interface CustomInspectionSaveTemplateDialogResult {\n doNotShowAgain?: boolean;\n}\n\n@Component({\n selector: 'app-schedule-save-template-dialog',\n templateUrl: './custom-inspection-save-template-dialog.component.html',\n styleUrls: ['./custom-inspection-save-template-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CustomInspectionSaveTemplateDialogComponent implements AfterViewInit {\n form = this.formBuilder.group({\n name: [this.data?.inspectionTemplate.inspectionName, [Validators.required]],\n });\n\n @ViewChild(InputComponent) templateInput: InputComponent;\n\n doNotShowAgain = false;\n\n constructor(\n public dialogRef: MatDialogRef<\n CustomInspectionSaveTemplateDialogComponent,\n CustomInspectionSaveTemplateDialogResult\n >,\n protected store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n private formBuilder: FormBuilder,\n private customInspectionService: CustomInspectionService,\n private snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) protected data: CustomInspectionSaveTemplateDialogData\n ) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.templateInput?.inputControl.nativeElement.focus();\n }, 0);\n }\n\n cancel() {\n this.dialogRef.close({ doNotShowAgain: this.doNotShowAgain });\n }\n\n save() {\n if (this.form.valid) {\n const saveObservable =\n this.form.value.name === this.data.inspectionTemplate.inspectionName\n ? this.customInspectionService.updateCustomInspectionTemplateContent(\n this.data.inspectionTemplate.id,\n this.data.inspectionTemplateContent\n )\n : this.customInspectionService.addCustomInspectionTemplateWithItems(\n {\n inspectionName: this.form.value.name,\n isRequired: this.data.inspectionTemplate.isRequired,\n },\n this.data.inspectionTemplateContent\n );\n (\n saveObservable as Observable<\n [number, RestCustomInspectionContentItemModel[]] | RestCustomInspectionContentItemModel[]\n >\n ).subscribe(() => {\n this.snackbarService.success(`${this.form.value.name} saved`);\n });\n this.cancel();\n } else {\n this.form.markAllAsTouched();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\n\nimport { BoardsAbstract } from '@main-application/boards/abstract/board-abstract.component';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-custom-inspection-header',\n templateUrl: './custom-inspection-header.component.html',\n styleUrls: ['./custom-inspection-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomInspectionHeaderComponent extends BoardsAbstract implements OnInit {\n editMode = false;\n\n @Input() header: string;\n @ViewChild('headerName', { read: ElementRef, static: false }) headerName: ElementRef;\n @Output() headerChanged = new EventEmitter();\n\n constructor(protected store: Store<{}>, protected cdr: ChangeDetectorRef, snackbarService: SnackbarService) {\n super(store, snackbarService);\n }\n\n ngOnInit(): void {}\n\n enterEditMode() {\n if (!this.checkEditRight() || this.editMode) {\n return;\n }\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.headerName.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n nameChanged($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n this.headerName.nativeElement.blur();\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.header !== value) {\n this.headerChanged.emit(value);\n }\n\n setTimeout(() => {\n const div = this.headerName.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n}\n","{{ header }}\n
    \n","import { CDK_DRAG_PARENT, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\n\nimport { BoardsAbstract } from '@main-application/boards/abstract/board-abstract.component';\nimport { RestCustomInspectionContentItemModel } from '@main-application/boards/interfaces/custom-inspection';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-custom-inspection-item',\n templateUrl: './custom-inspection-item.component.html',\n styleUrls: ['./custom-inspection-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomInspectionItemComponent extends BoardsAbstract implements OnInit, AfterViewInit {\n EIcon = EIcon;\n EColorPalette = EColorPalette;\n editMode = false;\n\n @Output() remove = new EventEmitter();\n @Output() itemNameChange = new EventEmitter();\n @Output() itemChecked = new EventEmitter();\n @Output() enterPressed = new EventEmitter();\n\n @Input() item: RestCustomInspectionContentItemModel;\n @ViewChild('itemName', { read: ElementRef, static: false }) itemName: ElementRef;\n @ViewChild(CdkDragHandle, { static: true }) handle: CdkDragHandle;\n\n constructor(\n protected store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n snackbarService: SnackbarService,\n @Optional() @Inject(CDK_DRAG_PARENT) public cdk\n ) {\n super(store, snackbarService);\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit() {\n this.cdk._handles.length = 1;\n this.cdk._handles._results = [this.handle];\n this.cdk._handles.changes.next();\n }\n\n get id() {\n return this.item.inspectionItemId;\n }\n enterEditMode() {\n if (!this.checkEditRight() || this.editMode) {\n return;\n }\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.itemName.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n nameChanged($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n this.itemName.nativeElement.blur();\n this.enterPressed.emit(this.item);\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n itemCheckedChange(value: boolean) {\n this.itemChecked.emit({ ...this.item, inspectionItemChecked: value });\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.item.inspectionItemName !== value) {\n this.itemNameChange.emit({ ...this.item, inspectionItemName: value });\n }\n\n setTimeout(() => {\n const div = this.itemName.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n\n removeClick() {\n this.remove.emit(this.item);\n }\n}\n","
    \n drag_indicator\n\n \n \n {{ item.inspectionItemName }}\n
    \n\n \n\n","\n \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n\n \n \n \n\n \n clear\n \n\n\n \n \n Edit mode:\n \n \n \n Mode:    \n {{ data.turnover.unitName }}\n \n \n
    \n
    \n \n \n
    \n \n
    \n
    \n\n
    \n \n
    \n \n \n\n \n
    \n \n
    \n
    \n
    \n","import { CdkDragEnter, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, filter } from 'rxjs';\n\nimport { BoardsAbstract } from '@main-application/boards/abstract/board-abstract.component';\nimport { CustomInspectionHeaderComponent } from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-header/custom-inspection-header.component';\nimport { CustomInspectionItemComponent } from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-item/custom-inspection-item.component';\nimport { BoardColumn, RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport { ColumnSettings } from '@main-application/boards/interfaces/boards-configuration';\nimport {\n CustomInspectionContent,\n RestCustomInspectionContentItemModel,\n} from '@main-application/boards/interfaces/custom-inspection';\nimport { BoardEventService } from '@main-application/boards/services/board-event.service';\nimport { CustomInspectionService } from '@main-application/boards/services/custom-inpection.service';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { ConfirmationModalData } from '@shared/interfaces/modal-data';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nexport type CustomInspectionDialogData = {\n turnover?: RestTurnoverTaskModel;\n column?: BoardColumn;\n boardEventService: BoardEventService;\n highLightHeader?: boolean;\n} & (\n | {\n cellData: RestTurnStepScheduleModel;\n inspectionTemplateId?: never;\n }\n | {\n inspectionTemplateId: number;\n cellData?: never;\n }\n);\n\nexport interface CustomInspectionDialogResult {\n inspectionTemplateId?: number;\n inspectionTemplateName?: string;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-custom-inspection-template-dialog',\n templateUrl: './custom-inspection-dialog.component.html',\n styleUrls: ['./custom-inspection-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomInspectionDialogComponent extends BoardsAbstract implements OnInit, AfterViewInit {\n ButtonType = ButtonType;\n EIcon = EIcon;\n inspectionContent: CustomInspectionContent = new CustomInspectionContent();\n inspectionTemplateContent: CustomInspectionContent = new CustomInspectionContent();\n columnConfiguration: ColumnSettings;\n isBlockDraggable = true;\n isTemplateMode = false;\n\n @ViewChild('addButtonContainer', { read: ElementRef, static: false })\n addColumnButtonContainer: ElementRef;\n isLoading = true;\n isItemsLoading = true;\n isUnitModeAvailable = true;\n showSwitcher = true;\n //templateChanged = false;\n doNotShowSaveTemplateDialogOnClose: boolean;\n inspectionTemplate: RestTemplateModel;\n\n target?: CdkDropList;\n targetIndex?: number;\n source?: CdkDropList;\n sourceIndex?: number;\n @ViewChild(CdkDropList) placeholder: CdkDropList;\n @ViewChildren(CustomInspectionItemComponent) inspectionItems!: QueryList;\n @ViewChild(CustomInspectionHeaderComponent) header: CustomInspectionHeaderComponent;\n\n constructor(\n public dialogRef: MatDialogRef,\n protected store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n private renderer: Renderer2,\n private customInspectionService: CustomInspectionService,\n private modalsService: ModalsService,\n protected snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) public data: CustomInspectionDialogData\n ) {\n super(store, snackbarService);\n }\n\n ngOnInit(): void {\n let inspectionTemplateId: number;\n let inspectionId: number;\n if (this.data?.cellData?.inspectionId) {\n this.data.boardEventService.getBoardConfig().subscribe(boardConfig => {\n this.columnConfiguration = boardConfig.columnSettings[this.data.column.id];\n this.doNotShowSaveTemplateDialogOnClose = !!this.columnConfiguration?.doNotShowSaveTemplateDialogOnClose;\n });\n inspectionTemplateId = this.data.cellData.inspectionTemplateId;\n inspectionId = this.data.cellData.inspectionId;\n } else {\n inspectionTemplateId = this.data.inspectionTemplateId ?? this.data.column.inspectionTemplateId;\n this.isTemplateMode = true;\n this.isUnitModeAvailable = false;\n }\n\n combineLatest([\n this.customInspectionService.getInspectionTemplate(inspectionTemplateId),\n this.customInspectionService.getCustomInspectionTemplateContent(inspectionTemplateId),\n ...(this.isUnitModeAvailable ? [this.customInspectionService.getCustomInspectionContent(inspectionId)] : []),\n ])\n .pipe(untilDestroyed(this))\n .subscribe(([inspectionTemplate, inspectionTemplateContent, inspectionContent]) => {\n if (this.isUnitModeAvailable) {\n this.inspectionContent.init(inspectionContent);\n this.inspectionContent.itemsChanges$.subscribe(items => {\n this.customInspectionService\n .updateCustomInspectionContent(inspectionId, items)\n .pipe(untilDestroyed(this))\n .subscribe();\n });\n }\n this.inspectionTemplate = inspectionTemplate;\n if (!inspectionTemplate.isAvailable) {\n this.showSwitcher = false;\n }\n this.inspectionTemplateContent.init(inspectionTemplateContent);\n this.inspectionTemplateContent.itemsChanges$.subscribe(() => {\n this.customInspectionService\n .updateCustomInspectionTemplateContent(inspectionTemplateId, this.inspectionTemplateContent.templateItems)\n .pipe(untilDestroyed(this))\n .subscribe();\n });\n this.isLoading = false;\n this.isItemsLoading = false;\n this.cdr.markForCheck();\n });\n\n // this.inspectionContent.templateChanges$.subscribe(() => {\n // this.templateChanged = true;\n // });\n\n this.dialogRef.backdropClick().subscribe(() => {\n this.cancel();\n });\n\n this.dialogRef.keydownEvents().subscribe(event => {\n if (event.key === 'Escape') {\n this.cancel();\n }\n });\n }\n\n get activeInspectionContent() {\n return this.isTemplateMode ? this.inspectionTemplateContent : this.inspectionContent;\n }\n\n changeMode(value: boolean) {\n this.isItemsLoading = true;\n this.isTemplateMode = value;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.isItemsLoading = false;\n this.cdr.markForCheck();\n }, 300);\n }\n\n trackById(_index: number, item?: RestCustomInspectionContentItemModel) {\n return item?.inspectionItemId;\n }\n\n openSaveTemplateDialog(onClose = false) {\n return this.modalsService\n .openCustomInspectionSaveTemplateModal({\n inspectionTemplate: {\n inspectionName: this.inspectionTemplate.name,\n isRequired: this.inspectionTemplate.customInspectionIsRequired,\n id: this.inspectionTemplate.id,\n },\n showDoNotShowAgain: onClose,\n inspectionTemplateContent: this.inspectionContent.templateItems,\n })\n .afterClosed();\n }\n\n add() {\n const customNamedItemMaxNumber = this.activeInspectionContent.items\n .filter(e => /^Item [0-9]*$/.test(e.inspectionItemName))\n .map(c => +c.inspectionItemName.replace('Item ', ''))\n .reduce((prev, max) => (prev > max ? prev : max), 0);\n\n const id = this.activeInspectionContent.addItem(`Item ${customNamedItemMaxNumber + 1}`);\n this.cdr.markForCheck();\n setTimeout(() => {\n const item = this.inspectionItems.find(c => c.id === id);\n item?.enterEditMode();\n this.addColumnButtonContainer.nativeElement.scrollIntoView();\n }, 100);\n }\n\n enterPressed(item: RestCustomInspectionContentItemModel) {\n const index = this.activeInspectionContent.items.findIndex(\n itemInner => itemInner.inspectionItemId === item.inspectionItemId\n );\n if (index === this.activeInspectionContent.items.length - 1) {\n this.add();\n } else {\n const id = this.activeInspectionContent.items[index + 1].inspectionItemId;\n const selectedItem = this.inspectionItems.find(c => c.id === id);\n selectedItem?.enterEditMode();\n }\n }\n\n remove(item: RestCustomInspectionContentItemModel) {\n if (!this.checkEditRight()) {\n return;\n }\n this.activeInspectionContent.removeItem(item.inspectionItemId);\n }\n\n itemNameChange(item: RestCustomInspectionContentItemModel) {\n if (!this.checkEditRight()) {\n return;\n }\n this.activeInspectionContent.updateItemName(item);\n }\n\n removeTemplate() {\n if (!this.checkEditRight()) {\n return;\n }\n const data: ConfirmationModalData = {};\n if (!this.isTemplateMode) {\n data.title = `Delete inspection ${this.inspectionTemplate.name}?`;\n data.content = `This will delete inspection. Are you feeling this confident?`;\n }\n this.customInspectionService\n .openRemovalTemplateModal(this.inspectionTemplate, data)\n .afterClosed()\n .pipe(filter(result => result === DialogResult.Success))\n .subscribe(() => {\n if (this.isTemplateMode) {\n if (!this.isUnitModeAvailable) {\n this.dialogRef.close();\n }\n this.customInspectionService.hideInspectionTemplate(this.inspectionTemplate).subscribe();\n this.isTemplateMode = false;\n this.showSwitcher = false;\n this.cdr.markForCheck();\n } else {\n this.dialogRef.close({ inspectionTemplateId: null });\n }\n });\n }\n\n itemCheckedChange(item: RestCustomInspectionContentItemModel) {\n this.activeInspectionContent.updateItemChecked(item, { emitChange: !this.isTemplateMode });\n if (this.isTemplateMode) {\n this.snackbarService.error('Items cannot be completed in Template mode');\n setTimeout(() => {\n item.inspectionItemChecked = false;\n this.activeInspectionContent.updateItemChecked(item, { emitChange: !this.isTemplateMode });\n this.cdr.markForCheck();\n });\n }\n }\n\n headerChange(header: string) {\n this.inspectionTemplate.name = header;\n if (this.data.cellData) {\n this.modalsService\n .openConfirmationModal(\n {\n title: 'Save template?',\n content: 'Do you want to change current template name or create new?',\n cancelColor: 'primary',\n confirmColor: 'primary',\n cancelLabel: 'Save as existing',\n confirmLabel: 'Save as new',\n },\n 360\n )\n .afterClosed()\n .subscribe(result => {\n if (result === DialogResult.Success) {\n this.createNewTemplate();\n } else {\n this.updateCurrentTemplate();\n }\n });\n } else {\n this.updateCurrentTemplate();\n }\n }\n\n createNewTemplate() {\n this.customInspectionService\n .addCustomInspectionTemplateWithItems(\n {\n inspectionName: this.inspectionTemplate.name,\n isRequired: this.inspectionTemplate.customInspectionIsRequired,\n },\n this.inspectionTemplateContent.templateItems\n )\n .subscribe(([templateId]) => {\n this.dialogRef.close({\n inspectionTemplateId: templateId,\n inspectionTemplateName: this.inspectionTemplate.name,\n });\n });\n }\n\n updateCurrentTemplate() {\n this.customInspectionService\n .editCustomInspectionTemplate(this.inspectionTemplate.id, {\n inspectionName: this.inspectionTemplate.name,\n isRequired: this.inspectionTemplate.customInspectionIsRequired,\n })\n .subscribe(() => {\n if (this.data.column && this.data.column.name !== this.inspectionTemplate.name) {\n const board = this.data.boardEventService.getBoard();\n const currentColumn = board.columns.find(column => column.id === this.data.column.id);\n currentColumn.name = this.inspectionTemplate.name;\n this.data.boardEventService.save();\n }\n });\n }\n\n ngAfterViewInit() {\n const phElement = this.placeholder.element.nativeElement;\n\n this.renderer.setStyle(phElement, 'display', 'none');\n this.renderer.removeChild(phElement.parentNode, phElement);\n\n if (this.data.highLightHeader) {\n setTimeout(() => {\n this.header?.enterEditMode();\n }, 0);\n }\n }\n drop() {\n if (!this.checkEditRight()) {\n return;\n }\n if (!this.target) return;\n\n const phElement = this.placeholder.element.nativeElement;\n const parent = phElement.parentNode;\n\n this.renderer.setStyle(phElement, 'display', 'inline');\n\n this.renderer.removeChild(parent, phElement);\n\n this.renderer.insertBefore(parent, this.source.element.nativeElement, parent.children[this.sourceIndex]);\n\n if (this.sourceIndex != this.targetIndex) {\n moveItemInArray(this.activeInspectionContent.items, this.sourceIndex, this.targetIndex);\n }\n\n this.target = undefined;\n this.source = undefined;\n this.targetIndex = undefined;\n this.sourceIndex = undefined;\n\n this.activeInspectionContent.onItemChanged();\n this.cdr.detectChanges();\n }\n\n enter(e: CdkDragEnter) {\n if (!this.checkEditRight()) {\n return;\n }\n const drag = e.item;\n const drop = e.container;\n\n if (drop === this.placeholder) return;\n\n const phElement = this.placeholder.element.nativeElement;\n const dropElement = drop.element.nativeElement;\n\n const dragIndex =\n typeof this.sourceIndex === 'number'\n ? this.sourceIndex\n : __indexOf(dropElement.parentNode.children, drag.dropContainer.element.nativeElement);\n\n const dropIndex = __indexOf(dropElement.parentNode.children, dropElement);\n\n if (!this.source) {\n this.sourceIndex = dragIndex;\n this.source = drag.dropContainer;\n const sourceElement = this.source.element.nativeElement;\n\n this.renderer.removeChild(sourceElement.parentNode, sourceElement);\n }\n\n this.renderer.setStyle(phElement, 'display', '');\n\n if (this.sourceIndex < dropIndex) {\n if (dropIndex < this.targetIndex) {\n this.renderer.insertBefore(dropElement.parentElement, phElement, dropElement);\n } else {\n this.renderer.insertBefore(dropElement.parentElement, phElement, dropElement.nextSibling);\n }\n } else {\n if (this.targetIndex < dropIndex) {\n this.renderer.insertBefore(dropElement.parentElement, phElement, dropElement.nextSibling);\n } else {\n this.renderer.insertBefore(dropElement.parentElement, phElement, dropElement);\n }\n }\n\n this.targetIndex = dropIndex;\n this.target = drop;\n\n this.placeholder._dropListRef.enter(\n drag._dragRef,\n drag.element.nativeElement.offsetLeft,\n drag.element.nativeElement.offsetTop\n );\n\n this.cdr.detectChanges();\n }\n\n cancel() {\n // TODO: commented for MVP\n // if (this.templateChanged && !this.doNotShowSaveTemplateDialogOnClose) {\n // this.openSaveTemplateDialog(true).subscribe(result => {\n // if (result.doNotShowAgain) {\n // this.data.boardEventService.updateColumnStore(this.data.column.id, {\n // doNotShowSaveTemplateDialogOnClose: result.doNotShowAgain,\n // });\n // }\n // this.dialogRef.close();\n // });\n // } else {\n this.dialogRef.close();\n //}\n }\n}\n\nfunction __indexOf(collection: any, node: any) {\n return Array.prototype.indexOf.call(collection, node);\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\n\nimport { RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport { parseNumber } from '@shared/functions/parse-number';\n\nexport interface ScheduleAmountDialogData {\n cellData: RestTurnStepScheduleModel;\n}\n\nexport interface ScheduleAmountDialogResult {\n amount?: number;\n}\n\n@Component({\n selector: 'app-schedule-amount-dialog',\n templateUrl: './schedule-amount-dialog.component.html',\n styleUrls: ['./schedule-amount-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ScheduleAmountDialogComponent implements OnInit, AfterViewInit {\n data: ScheduleAmountDialogData;\n amount?: number;\n\n @ViewChild('input', { read: ElementRef }) input: ElementRef;\n\n constructor(\n public dialogRef: MatDialogRef,\n protected store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n @Inject(MAT_DIALOG_DATA) data: ScheduleAmountDialogData\n ) {\n this.data = data;\n this.amount = data.cellData.amount;\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.input.nativeElement.select();\n }, 0);\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n send(value: string) {\n this.dialogRef.close({\n amount: parseNumber(value),\n } as ScheduleAmountDialogResult);\n }\n\n keyUp($event: KeyboardEvent, input: HTMLInputElement) {\n if (input.value === '' && $event.key === '.') {\n input.value = '0.';\n }\n }\n}\n","
    \n

    \n
    {{ data.cellData.amount ? 'Update Amount' : 'Enter Amount' }}
    \n

    \n \n $\n \n \n \n \n \n \n \n \n
    \n","import { RestContractorModel } from '@shared/interfaces/contractors.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getEmployeeRadioList(employeeList: RestContractorModel[]): IRadioButtonOption[] {\n return (\n employeeList\n ?.filter(item => item.isActive)\n .map>(item => {\n return {\n value: item.id,\n label: `${item.displayName}`,\n };\n }) || []\n );\n}\n","

    \n {{ data.turnover.propertyName }} - {{ data.turnover.unitName }}: \n {{ data.column.name }}\n

    \n
    \n \n
    \n
    \n \n\n \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n 0\">\n \n \n notify\n
    \n
    \n
    \n \n remember my choices\n \n \n add one-time note\n \n
    \n \n
    \n
    \n \n \n \n \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport * as moment from 'moment';\nimport { Observable, debounceTime, filter, firstValueFrom, map, take } from 'rxjs';\nimport { pairwise, startWith, switchMap, tap } from 'rxjs/operators';\n\nimport { CompaniesService } from '@app/services/companies.service';\nimport { UserService } from '@app/services/user.service';\nimport { loadPropertyUsers } from '@main-application/administration/actions/administration.actions';\nimport {\n selectPropertyUsers,\n selectPropertyUsersLoading,\n} from '@main-application/administration/selectors/administration.selectors';\nimport { BoardsAbstract } from '@main-application/boards/abstract/board-abstract.component';\nimport { BoardColumn, RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport { ScheduleCellStatus } from '@main-application/boards/interfaces/board.enums';\nimport { ColumnSettings } from '@main-application/boards/interfaces/boards-configuration';\nimport { BoardEventService } from '@main-application/boards/services/board-event.service';\nimport { CustomInspectionService } from '@main-application/boards/services/custom-inpection.service';\nimport { InspectionType } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport { getCompanyList } from '@main-application/turnovers/actions/turnovers.actions';\nimport { selectCompanyList } from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { UserType } from '@shared/enums/user-type';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { getEmployeeRadioList } from '@shared/functions/get-employee-radio-list.function';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { selectTenantData } from '@shared/selectors/user.selectors';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { ContentEditableAreaComponent } from '@ui-components/components/content-editable-area/content-editable-area.component';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nexport interface ScheduleCellDialogData {\n cellData: RestTurnStepScheduleModel;\n column: BoardColumn;\n turnover: RestTurnoverTaskModel;\n boardEventService: BoardEventService;\n}\n\nexport class ScheduleCellDialogResult extends RestTurnStepScheduleModel {\n assigneeEmail: string;\n newCustomTemplate: boolean;\n}\n\nconst NewCustomTemplateOption: IRadioButtonOption = {\n value: -1,\n label: 'Custom Inpsection',\n};\n@UntilDestroy()\n@Component({\n selector: 'app-schedule-cell-dialog',\n templateUrl: './schedule-cell-dialog.component.html',\n styleUrls: ['./schedule-cell-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScheduleCellDialogComponent extends BoardsAbstract implements OnInit {\n appendTo = 'app-boards';\n form = this.formBuilder.group({\n dueDate: [null as Date, [Validators.required]],\n isVendor: [false],\n assignee: [null as number],\n vendor: [null as number],\n remember: [false],\n notifyAssignee: [false],\n note: [null as string],\n inspectionTemplateId: [null as number],\n });\n formReady = false;\n showNote = false;\n ButtonType = ButtonType;\n today = this.timezoneService.getCurrentDateOnly();\n userListModel: RestUserModel[] = [];\n vendorList: IRadioButtonOption[] = [];\n vendorAssigneeList: IRadioButtonOption[] = [];\n propertyUserListLoading$: Observable;\n isReschedule: boolean;\n columnConfiguration: ColumnSettings;\n systemConfigPmsName$ = this.store.select(selectTenantData).pipe(\n untilDestroyed(this),\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.pmses.split(',')[0])\n );\n\n inspectionTemplatesOptions: IRadioButtonOption[][];\n inspectionTemplates: RestTemplateModel[];\n isInspectionTemplatesLoading$: Observable;\n\n @ViewChild('commentArea') editInput: ContentEditableAreaComponent;\n\n constructor(\n public dialogRef: MatDialogRef,\n private formBuilder: FormBuilder,\n protected store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n private timezoneService: TimezoneService,\n private modalsService: ModalsService,\n protected snackbarService: SnackbarService,\n private companiesService: CompaniesService,\n private userService: UserService,\n private customInspectionService: CustomInspectionService,\n @Inject(MAT_DIALOG_DATA) protected data: ScheduleCellDialogData\n ) {\n super(store, snackbarService);\n this.isReschedule = !!this.data.cellData.id;\n }\n\n ngOnInit(): void {\n this.propertyUserListLoading$ = this.store.select(selectPropertyUsersLoading).pipe(debounceTime(200));\n this.store.dispatch(loadPropertyUsers({ propertyId: this.data.turnover.propertyId }));\n this.store.dispatch(getCompanyList());\n\n // should be before initialize, order matters\n this.form.controls.inspectionTemplateId.valueChanges.pipe(startWith(null), pairwise()).subscribe(([prev, next]) => {\n if (next === NewCustomTemplateOption.value && !this.checkEditRight()) {\n this.form.patchValue({ inspectionTemplateId: prev });\n }\n });\n this.initialize();\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.vendorList = getCompanyRadioList(companyList);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectPropertyUsers)\n .pipe(\n untilDestroyed(this),\n filter((users: RestUserModel[]) => !!users)\n )\n .subscribe((users: RestUserModel[]) => {\n this.userListModel = users;\n this.cdr.detectChanges();\n });\n\n this.form.controls.assignee.valueChanges.subscribe(value => this.form.controls.notifyAssignee.setValue(!!value));\n\n this.form.controls.isVendor.valueChanges.subscribe(value => {\n if (!this.formReady) {\n return;\n }\n if (value) {\n this.form.controls.assignee.setValue(null);\n } else {\n this.form.controls.vendor.setValue(null);\n this.form.controls.assignee.setValue(null);\n }\n });\n\n this.form.controls.vendor.valueChanges.subscribe((vendorId: number | null) => {\n this.vendorAssigneeList = [];\n if (this.formReady) {\n this.form.controls.assignee.setValue(null);\n }\n if (vendorId) {\n this.companiesService.getCompany(vendorId).subscribe(company => {\n this.vendorAssigneeList = getEmployeeRadioList(company.employees);\n this.cdr.detectChanges();\n });\n }\n this.cdr.detectChanges();\n });\n\n this.data.boardEventService.getBoardConfig().subscribe(boardConfig => {\n this.columnConfiguration = boardConfig.columnSettings[this.data.column.id];\n\n if (this.columnConfiguration?.rememberAssignee) {\n const patchValue: typeof this.form.value = {\n notifyAssignee: this.columnConfiguration?.notifyAssignee,\n remember: this.columnConfiguration?.rememberAssignee,\n };\n\n if (!this.isReschedule) {\n patchValue.assignee = this.columnConfiguration?.assignee;\n }\n patchValue.inspectionTemplateId = this.columnConfiguration.inspectionTemplateId;\n\n this.form.patchValue(patchValue, { emitEvent: false });\n }\n });\n\n this.form.valueChanges\n .pipe(\n untilDestroyed(this),\n filter(formValue => formValue.remember)\n )\n .subscribe(formValue => {\n this.data.boardEventService.updateColumnStore(this.data.column.id, {\n assignee: formValue.assignee,\n rememberAssignee: formValue.remember,\n notifyAssignee: formValue.notifyAssignee,\n inspectionTemplateId: formValue.inspectionTemplateId,\n });\n });\n }\n\n initialize() {\n this.isInspectionTemplatesLoading$ = this.customInspectionService.templatesLoading$.pipe(debounceTime(200));\n this.customInspectionService\n .getInspectionTemplates(this.data.cellData?.inspectionTemplateId)\n .pipe(\n tap(templatesList => {\n this.inspectionTemplates = templatesList;\n\n this.inspectionTemplatesOptions = [\n [NewCustomTemplateOption],\n this.inspectionTemplates.map(template => ({ label: template.name, value: template.id })) ?? [],\n ];\n if (!templatesList.find(template => template.id === this.form.value.inspectionTemplateId)) {\n this.form.patchValue({ inspectionTemplateId: undefined }, { emitEvent: false });\n }\n this.cdr.markForCheck();\n })\n )\n .subscribe();\n\n if (this.data?.cellData.assignee) {\n this.userService.getUserById(this.data?.cellData.assignee).subscribe(user => {\n this.initForm(user.userGroupType === UserType.Contractor ? user.companyId : null);\n });\n } else {\n this.initForm(null);\n }\n }\n\n initForm(vendor: number | null) {\n this.form.patchValue({\n ...this.data?.cellData,\n // reschedule uses existing template id, schedule uses column settings\n inspectionTemplateId: this.data.cellData?.inspectionTemplateId ?? this.data.column?.inspectionTemplateId,\n isVendor: !!vendor,\n vendor,\n dueDate: this.data.cellData.dueDate ?? this.today,\n });\n this.formReady = true;\n this.cdr.markForCheck();\n }\n\n async ok() {\n if (this.form.valid) {\n const cellValue = this.form.value;\n const { dateMoveIn } = this.data.turnover.turnoverData;\n if (dateMoveIn && cellValue.dueDate > dateMoveIn) {\n this.modalsService\n .openConfirmationModal({\n title: 'Are you sure this isn’t too late',\n content: `This date is after tenant’s expected Move In Date of ${moment(dateMoveIn).format('MM/DD/YYYY')}`,\n cancelLabel: 'Cancel',\n confirmLabel: 'Yes, I am sure',\n })\n .afterClosed()\n .pipe(\n filter(result => result === DialogResult.Success),\n switchMap(() =>\n this.modalsService\n .openConfirmationModal({\n title: 'Are you sure this isn’t too late',\n content: `Are you really really sure?`,\n cancelLabel: 'Cancel',\n confirmLabel: 'Yes, I am really sure',\n })\n .afterClosed()\n ),\n filter(result => result === DialogResult.Success)\n )\n .subscribe(async () => {\n this.dialogRef.close(await this.getDialogResult());\n this.systemConfigPmsName$.subscribe(pmsName =>\n this.snackbarService.warning(\n `Remember to change the Move In Date in ${pmsName} to after ${moment(cellValue.dueDate).format(\n 'MM/DD/YYYY'\n )}!`\n )\n );\n });\n } else {\n this.dialogRef.close(await this.getDialogResult());\n }\n } else {\n this.form.markAllAsTouched();\n }\n }\n\n async getDialogResult(): Promise {\n const cellValue = this.form.value;\n let inspectionTemplateId: number;\n if (cellValue.inspectionTemplateId === NewCustomTemplateOption.value) {\n [inspectionTemplateId] = await this.addNewCustomTemplate();\n } else {\n inspectionTemplateId = cellValue.inspectionTemplateId;\n }\n\n cellValue.notifyAssignee = cellValue.notifyAssignee && !!cellValue.assignee;\n cellValue.note = cellValue.notifyAssignee ? cellValue.note : null;\n return {\n ...cellValue,\n status: cellValue.dueDate < this.today ? ScheduleCellStatus.Late : ScheduleCellStatus.Due,\n inspectionTemplateId: inspectionTemplateId,\n inspectionType: cellValue.inspectionTemplateId\n ? cellValue.inspectionTemplateId === NewCustomTemplateOption.value\n ? InspectionType.CustomInspection\n : this.inspectionTemplates.find(template => template.id === cellValue.inspectionTemplateId)?.inspectionType\n : undefined,\n assigneeEmail: this.userListModel.find(e => e.id === cellValue.assignee)?.email,\n newCustomTemplate: cellValue.inspectionTemplateId === NewCustomTemplateOption.value,\n } as ScheduleCellDialogResult;\n }\n\n async addNewCustomTemplate() {\n const customInspectionMaxNumber = this.inspectionTemplates\n .filter(e => /^Custom Inspection[0-9]*$/.test(e.name))\n .map(c => +c.name.replace('Custom Inspection', ''))\n .reduce((prev, max) => (prev > max ? prev : max), 0);\n\n return await firstValueFrom(\n this.customInspectionService.addCustomInspectionTemplateWithPredefinedItems({\n inspectionName: `Custom Inspection${customInspectionMaxNumber + 1}`,\n isRequired: false,\n })\n );\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n focusOnComment() {\n if (this.showNote) {\n this.form.controls.notifyAssignee.setValue(true);\n if (this.editInput?.editInput?.nativeElement) {\n this.editInput.editInput.nativeElement.focus();\n } else {\n setTimeout(() => this.editInput?.editInput?.nativeElement?.focus(), 1);\n }\n }\n }\n\n addNewVendor() {\n this.modalsService\n .openNewVendorModal({})\n .afterClosed()\n .pipe(\n tap(company => {\n if (company) {\n this.form.controls.vendor.setValue(company.id);\n this.companiesService.getCompany(company.id).subscribe(company => {\n this.vendorAssigneeList = getEmployeeRadioList(company.employees);\n if (this.vendorAssigneeList.length) {\n this.form.controls.assignee.setValue(this.vendorAssigneeList[0].value);\n }\n this.cdr.detectChanges();\n });\n }\n this.store.dispatch(getCompanyList());\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n addNewVendorAssignee() {\n const selectedVendor = this.vendorList.find(v => v.value === this.form.controls.vendor.value);\n if (selectedVendor) {\n this.modalsService\n .openVendorUserModal(selectedVendor.value, `Add employee and assign to ${this.data.column.name}`)\n .afterClosed()\n .pipe(\n untilDestroyed(this),\n tap(data => {\n if (data?.invitedUser) {\n this.store.dispatch(getCompanyList());\n this.companiesService.getCompany(selectedVendor.value).subscribe(company => {\n this.vendorAssigneeList = getEmployeeRadioList(company.employees);\n this.form.controls.assignee.setValue(data.invitedUser.id);\n this.cdr.detectChanges();\n });\n }\n })\n )\n .subscribe();\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { BoardConfiguration, BoardOutputTypeList } from '@main-application/boards/interfaces/board';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\n\nexport class ScheduleDoneDialogData {\n turnover: RestTurnoverTaskModel;\n board: BoardConfiguration;\n}\n\nexport class ScheduleCellResult {\n rememberIt: boolean;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-schedule-done-dialog',\n templateUrl: './schedule-done-dialog.component.html',\n styleUrls: ['./schedule-done-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScheduleDoneDialogComponent implements OnInit {\n form = this.formBuilder.group({\n rememberIt: [false],\n });\n ButtonType = ButtonType;\n inputItem: string;\n outputName: string;\n boardName: string;\n\n constructor(\n public dialogRef: MatDialogRef,\n private formBuilder: FormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: ScheduleDoneDialogData\n ) {}\n\n ngOnInit(): void {\n this.boardName = this.data.board.name;\n this.inputItem = this.data.turnover.unitName;\n this.outputName = BoardOutputTypeList.find(e => e.value == this.data.board.outputAction).label;\n }\n\n ok() {\n this.dialogRef.close({\n rememberIt: this.form.value.rememberIt,\n });\n }\n\n cancel() {\n this.dialogRef.close();\n }\n}\n","

    Remove {{ inputItem }}?

    \n\n
    \n \n Do this automatically when all steps are complete\n \n
    \n
    \n\n \n \n\n","
    \n
    Add bid
    \n
    \n\n
    \n \n\n
    \n \n \n
    \n
    \n \n \n
    \n \n
    \n\n
    \n \n \n
    \n
    \n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable, filter, first, take } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport {\n addTurnoverBidCategory,\n addTurnoverBidCategorySuccess,\n createTurnoverBid,\n createTurnoverBidSuccess,\n} from '@main-application/turnovers/actions/turnover-bids.actions';\nimport { getCompanyList } from '@main-application/turnovers/actions/turnovers.actions';\nimport {\n selectTurnoverBidAdding,\n selectTurnoverBidCategories,\n} from '@main-application/turnovers/selectors/turnover-bids.selectors';\nimport { selectCompanyList } from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { getBidCategoriesRadioList } from '@shared/functions/get-bid-categories-radio-list.function';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { Upload } from '@shared/interfaces';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { AddUpdateTurnoverBid } from '@shared/interfaces/turnover-bids.interface';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nexport interface AddBidModalResult {\n bid: AddUpdateTurnoverBid;\n}\n\nexport interface AddBidModalData {\n turnoverId: number;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-bid-modal',\n templateUrl: './add-bid-modal.component.html',\n styleUrls: ['./add-bid-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddBidModalComponent implements OnInit {\n inProgress$: Observable;\n formSubmitted = false;\n vendorList: IRadioButtonOption[] = [];\n categoryList: IRadioButtonOption[] = [];\n today = new Date();\n form = new FormGroup({\n file: new UntypedFormControl(null as Upload, [Validators.required]),\n bidAmount: new UntypedFormControl(null, [Validators.required]),\n vendorId: new UntypedFormControl(null, [Validators.required]),\n categoryId: new UntypedFormControl(null, [Validators.required]),\n bidDate: new UntypedFormControl(this.today, [Validators.required]),\n });\n\n constructor(\n private cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: AddBidModalData,\n private store: Store<{}>,\n private modalsService: ModalsService,\n private actions$: Actions\n ) {}\n\n ngOnInit(): void {\n this.inProgress$ = this.store.select(selectTurnoverBidAdding);\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.vendorList = getCompanyRadioList(companyList);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectTurnoverBidCategories)\n .pipe(\n untilDestroyed(this),\n tap(categories => {\n this.categoryList = getBidCategoriesRadioList(categories);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n fileUploaded(item: AttachmentItem) {\n this.form.controls.file.setValue(item?.upload);\n this.cdr.detectChanges();\n }\n\n save() {\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAsTouched();\n this.cdr.detectChanges();\n return;\n }\n const { file, bidAmount, bidDate, vendorId, categoryId } = this.form.value;\n const result = {\n bid: {\n bidAmount,\n bidDate,\n vendorId,\n turnoverId: this.data.turnoverId,\n status: 0,\n draftInvoiceFileUploadId: file.id,\n turnoverDataBidCategoryId: categoryId,\n },\n };\n\n this.store.dispatch(createTurnoverBid(result));\n\n this.actions$\n .pipe(\n ofType(createTurnoverBidSuccess),\n take(1),\n tap(action => {\n this.dialogRef.close(result);\n })\n )\n .subscribe();\n }\n\n close() {\n this.dialogRef.close();\n }\n\n addNewVendor() {\n this.modalsService\n .openNewVendorModal({})\n .afterClosed()\n .pipe(\n tap(company => {\n if (company) {\n this.form.controls.vendorId.setValue(company.id);\n this.store.dispatch(getCompanyList());\n this.cdr.detectChanges();\n }\n })\n )\n .subscribe();\n }\n\n addNewCategory() {\n this.modalsService\n .openPrompt({\n title: 'Add new category',\n fieldName: 'Name',\n })\n .afterClosed()\n .pipe(\n filter(Boolean),\n tap(result => {\n if (result.value) {\n this.actions$\n .pipe(\n ofType(addTurnoverBidCategorySuccess),\n first(),\n tap(({ categoryId }) => {\n this.form.controls.categoryId.setValue(categoryId);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n this.store.dispatch(addTurnoverBidCategory({ name: result.value }));\n }\n })\n )\n .subscribe();\n }\n}\n","import { UserType } from '@shared/enums/user-type';\n\nexport enum UserPreviewFields {\n FirstName = 'firstName',\n LastName = 'lastName',\n Email = 'email',\n RoleId = 'roleId',\n UserGroupType = 'userGroupType',\n CompanyId = 'companyId',\n PhoneNumber = 'phoneNumber',\n NativeLanguage = 'nativeLanguage',\n}\n\nexport interface UserPreview {\n [UserPreviewFields.FirstName]: string;\n [UserPreviewFields.LastName]: string;\n [UserPreviewFields.Email]: string;\n [UserPreviewFields.RoleId]: number;\n [UserPreviewFields.UserGroupType]: UserType;\n [UserPreviewFields.CompanyId]: number;\n [UserPreviewFields.PhoneNumber]: string;\n [UserPreviewFields.NativeLanguage]: number;\n}\n","import { every, filter, find, first, map, size, some } from 'lodash';\n\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithProperties } from '@shared/interfaces/user-with-properties';\n\nexport function combineUserWithProperties(\n userId: number,\n allProperties: PropertyBasicInfo[],\n propertyMapping: UserToPropertyMapping[]\n) {\n const userPropertiesMappings = filter(propertyMapping, { userId });\n const userMappedProperties = map(userPropertiesMappings, mapping => {\n return find(allProperties, { id: mapping.propertyId });\n });\n return filter(userMappedProperties, userProperty => !!userProperty);\n}\n\nexport function compareAllUsersProperties(users: UserWithProperties[]) {\n const firstUser = first(users);\n return every(users, user => {\n return (\n !!user.userProperties === !!firstUser.userProperties &&\n size(user.userProperties) === size(firstUser.userProperties) &&\n every(user.userProperties, property => some(firstUser.userProperties, { id: property.id }))\n );\n });\n}\n","import { cloneDeep, forEach, reduce } from 'lodash';\n\nimport { PropertyBasicInfo, PropertyBasicInfoNode } from '@shared/interfaces/propertyBasicInfo';\n\nexport function formatPropertyStructureToTree(allProperties: PropertyBasicInfo[]) {\n const root = {\n children: [],\n name: 'All',\n id: -1,\n } as unknown as PropertyBasicInfoNode;\n const properties: PropertyBasicInfoNode[] = cloneDeep(allProperties);\n const propertiesIndexMap = reduce(\n properties,\n (result, singleProperty, index) => {\n result[singleProperty.id] = index;\n return result;\n },\n {}\n );\n\n forEach(properties, singleProperty => {\n if (!singleProperty.parentId) {\n singleProperty.parent = root;\n root.children = [...root.children, singleProperty];\n return;\n }\n\n const parentIndex = propertiesIndexMap[singleProperty.parentId];\n const parent = properties[parentIndex];\n if (parent === undefined) {\n console.warn(\n \"couldn't find parent for element \",\n singleProperty.id,\n ' with parentId = ',\n singleProperty.parentId\n );\n return;\n }\n singleProperty.parent = parent;\n parent.children = [...(parent.children || []), singleProperty];\n });\n\n return [root];\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const UserExistsValidator = (emailAddressList: string[]): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (!control.value || !emailAddressList?.length) {\n return null;\n }\n\n if (emailAddressList.includes(control.value)) {\n return {\n userAlreadyExists: true,\n };\n }\n return null;\n };\n};\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const UserInactiveValidator = (emailAddressList: string[]): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (!control.value || !emailAddressList?.length) {\n return null;\n }\n\n if (emailAddressList.includes(control.value)) {\n return {\n userInactive: true,\n };\n }\n return null;\n };\n};\n","export enum PropertyType {\n None = 0,\n Portfolio = 1,\n Property = 2,\n Building = 3,\n Unit = 4,\n}\n","import { TreeModel, TreeNode } from '@circlon/angular-tree-component';\n\n// built-in function had deffects (highly affecting tests)\n// https://github.com/CirclonGroup/angular-tree-component/issues/928\n//\nexport function doForAllTreeNodes(treeModel: TreeModel, callback: (node: TreeNode) => void) {\n treeModel.roots.forEach(node => doForAllNodes(node, callback));\n}\n\nfunction doForAllNodes(node: TreeNode, callback: (node: TreeNode) => void) {\n if (!node) return;\n\n callback(node);\n if (node.children) {\n node.children.forEach(child => doForAllNodes(child, callback));\n }\n}\n","
    \n \n
    \n \n \n \n
    \n \n
    \n\n \n
    \n \n \n
    \n \n
    \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { IActionMapping, ITreeOptions, TreeComponent, TreeModel, TreeNode } from '@circlon/angular-tree-component';\nimport { IDTypeDictionary } from '@circlon/angular-tree-component/lib/defs/api';\nimport { each, every, find, isEmpty, reduce, some, toLower } from 'lodash';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { PropertyType } from '@shared/enums/property-type.enum';\nimport { PropertyBasicInfo, PropertyBasicInfoNode } from '@shared/interfaces/propertyBasicInfo';\n\nimport { doForAllTreeNodes } from './functions/tree-utils';\n\n@Component({\n selector: 'app-select-tree',\n templateUrl: './select-tree.component.html',\n styleUrls: ['./select-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectTreeComponent extends ComponentAbstract {\n @Input() containerCss = 'display-flex flex-column';\n @Input() label = '';\n @Input() labelCss = 'body-small-bold nowrap';\n @Input() nodes;\n @Input() selectedNodes: PropertyBasicInfoNode[];\n @Input() warningMessage: string;\n @Input() labelRequired = false;\n @Input() selectAllEvent = new EventEmitter();\n @Output() selectedRoots = new EventEmitter();\n @Output() clearAll = new EventEmitter();\n @ViewChild(TreeComponent) tree: TreeComponent;\n filterString = '';\n placeholder = 'select property';\n\n actionMapping: IActionMapping = {\n mouse: {\n checkboxClick: this.checkboxClick.bind(this),\n },\n };\n\n options: ITreeOptions = {\n useCheckbox: true,\n useVirtualScroll: true,\n nodeHeight: 23,\n actionMapping: this.actionMapping,\n };\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n this.updatePlaceholderAndEmit = this.updatePlaceholderAndEmit.bind(this);\n }\n\n treeInitialized() {\n this.selectNodes(this.selectedNodes);\n }\n\n clearSelection() {\n this.tree.treeModel.selectedLeafNodeIds = {};\n this.updatePlaceholderAndEmit({});\n this.clearAll.emit();\n }\n\n hasNodesSelected(): boolean {\n if (!this.tree || !this.tree.treeModel) {\n return false;\n }\n const selectionObject = this.tree.treeModel.selectedLeafNodeIds;\n return some(Object.values(selectionObject), value => value);\n }\n\n selectNodes(propertiesToSelect: PropertyBasicInfo[]) {\n if (!this.tree) {\n console.error('missing tree, return ');\n return;\n }\n\n doForAllTreeNodes(this.tree.treeModel, treeNode => {\n const shouldSelectNode = find(propertiesToSelect, property => treeNode.data.id === property.id);\n if (shouldSelectNode) {\n this.setValue(this.tree.treeModel, treeNode, true);\n }\n });\n }\n\n filterTree(event: Event) {\n const text = (event.target as HTMLInputElement).value;\n this.tree.treeModel.filterNodes(node => {\n const allParentsName = this.getAncestorsName(node.data);\n return toLower(allParentsName).includes(toLower(text));\n });\n\n if (isEmpty(text)) {\n this.collapseAll();\n this.expandRoot();\n return;\n }\n }\n\n expandRoot() {\n const firstRoot = this.tree.treeModel.roots[0];\n firstRoot.expand();\n }\n\n getAncestorsName(node: PropertyBasicInfoNode) {\n if (node.parent) {\n return this.getAncestorsName(node.parent) + node.name;\n }\n\n return node.name;\n }\n\n toggleMenu(menuExpanded: boolean) {\n this.isExpanded = menuExpanded;\n\n if (this.isExpanded) {\n this.onListOpen();\n } else {\n this.onListClose();\n }\n\n this.cdr.detectChanges();\n }\n\n setValue(tree: TreeModel, node: TreeNode, selectionValue) {\n const selectedLeafNodeIds = tree.selectedLeafNodeIds;\n toggleNodeSelection(node, selectionValue, selectedLeafNodeIds);\n tree.selectedLeafNodeIds = Object.assign({}, selectedLeafNodeIds, { [node.id]: selectionValue });\n\n this.updatePlaceholderAndEmit(selectedLeafNodeIds);\n }\n\n checkboxClick(tree: TreeModel, node: TreeNode, $event: any) {\n if (!node) {\n return;\n }\n\n const selectionValue = !node.isSelected;\n const selectedLeafNodeIds = tree.selectedLeafNodeIds;\n toggleNodeSelection(node, selectionValue, selectedLeafNodeIds);\n tree.selectedLeafNodeIds = Object.assign({}, selectedLeafNodeIds, { [node.id]: selectionValue });\n\n this.updatePlaceholderAndEmit(selectedLeafNodeIds);\n }\n\n updatePlaceholderAndEmit(selectedNodeIds: IDTypeDictionary) {\n const { selectedLeaves, selectedRoots, isRootSelected } = this.getSelectedNodes(selectedNodeIds);\n this.selectedRoots.emit(selectedRoots);\n if (!isEmpty(selectedLeaves)) {\n this.placeholder = isRootSelected\n ? 'All'\n : selectedLeaves.length === 1\n ? `Selected: ${selectedLeaves.length} Unit`\n : `Selected: ${selectedLeaves.length} Units`;\n } else {\n this.placeholder = 'Select property';\n }\n }\n\n collapseAll() {\n this.tree.treeModel.expandedNodeIds = {};\n }\n\n expanderClick(tree: TreeModel, node: TreeNode, $event: any) {\n if (!node || !node.hasChildren) {\n return;\n }\n const value = !node.isExpanded;\n if (node.hasChildren) {\n tree.expandedNodeIds = Object.assign({}, tree.expandedNodeIds, { [node.id]: value });\n }\n }\n\n getSelectedNodes(selectedNodeIds: IDTypeDictionary) {\n const entries = Object.entries(selectedNodeIds);\n let isRootSelected = false;\n\n const onlySelectedNodes = reduce(\n entries,\n (acc, [id, isChecked]) => {\n if (isChecked) {\n if (id === '-1') {\n isRootSelected = true;\n }\n acc.push(id);\n }\n return acc;\n },\n []\n );\n\n const selectedRoots = this.getSelectedRootsRecursive([], this.nodes[0], onlySelectedNodes);\n const selectedLeaves = this.getSelectedLeavesRecursive([], this.nodes[0], onlySelectedNodes);\n\n return { selectedRoots, selectedLeaves, isRootSelected };\n }\n\n private getSelectedLeavesRecursive(acc, node: PropertyBasicInfoNode, selectedNodeIds: string[]) {\n if (!node.children && selectedNodeIds.includes(node.id.toString()) && node.propertyType === PropertyType.Unit) {\n acc.push(node);\n return acc;\n }\n\n if (node.children) {\n each(node.children, childNode => this.getSelectedLeavesRecursive(acc, childNode, selectedNodeIds));\n }\n return acc;\n }\n\n private getSelectedRootsRecursive(acc, node: PropertyBasicInfoNode, selectedNodeIds: string[]) {\n if (node.parent && selectedNodeIds.includes(node.id.toString())) {\n acc.push(node);\n return acc;\n }\n\n if (node.children) {\n each(node.children, childNode => this.getSelectedRootsRecursive(acc, childNode, selectedNodeIds));\n }\n return acc;\n }\n\n private onListOpen() {\n this.tree.treeModel.clearFilter();\n this.collapseAll();\n this.expandRoot();\n this.tree.sizeChanged();\n }\n\n private onListClose(): void {\n this.filterString = '';\n }\n}\n\nfunction toggleNodeSelection(node: TreeNode, selectionValue, selectedLeafNodeIds) {\n selectedLeafNodeIds[node.id] = selectionValue;\n\n if (selectionValue) {\n selectParentIfNeeded(node.parent, selectedLeafNodeIds);\n }\n\n if (!selectionValue) {\n deselectAncestorsIfNeeded(node.parent, selectedLeafNodeIds);\n }\n\n if (!isEmpty(node.children)) {\n node.children.forEach(childNode => toggleNodeSelection(childNode, selectionValue, selectedLeafNodeIds));\n }\n}\n\nfunction isNodeSelected(nodeToCheck: TreeNode, selectedLeafNodeIds) {\n return selectedLeafNodeIds[nodeToCheck.id];\n}\n\nfunction selectParentIfNeeded(parentNode: TreeNode, selectedLeafNodeIds) {\n if (every(parentNode.children, (childNode: TreeNode) => isNodeSelected(childNode, selectedLeafNodeIds))) {\n selectedLeafNodeIds[parentNode.id] = true;\n if (parentNode.parent) {\n selectParentIfNeeded(parentNode.parent, selectedLeafNodeIds);\n }\n }\n}\n\nfunction deselectAncestorsIfNeeded(parentNode: TreeNode, selectedLeafNodeIds) {\n if (\n isNodeSelected(parentNode, selectedLeafNodeIds) &&\n some(parentNode.children, (childNode: TreeNode) => !isNodeSelected(childNode, selectedLeafNodeIds))\n ) {\n selectedLeafNodeIds[parentNode.id] = false;\n if (parentNode.parent) {\n deselectAncestorsIfNeeded(parentNode.parent, selectedLeafNodeIds);\n }\n }\n}\n","
    \n
    \n
    {{ header }}
    \n
    \n\n \n
    \n
    \n
    \n \n \n
    \n \n\n
    \n \n \n
    \n\n \n
    \n
    \n
    \n \n \n \n \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { some } from 'lodash';\nimport { Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\n\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport {\n clearUserPreviewData,\n inviteNewUser,\n loadAllGeneralRoles,\n} from '@main-application/administration/actions/administration.actions';\nimport { VENDOR_ROLE_NAME } from '@main-application/administration/constants/vendor-role-name.constant';\nimport { combineUserWithProperties } from '@main-application/administration/functions/combineUserWithProperties';\nimport { formatPropertyStructureToTree } from '@main-application/administration/functions/propertyStructureToTree';\nimport {\n selectAllGeneralRoles,\n selectAllPropertiesStructure,\n selectAllUserToPropertyMappings,\n selectAllUsersWithGeneralRoles,\n selectAssignUserIntoPropertyInProgress,\n selectAssignUserIntoPropertyStatus,\n selectInactiveUsers,\n selectSaveUserToGeneralRoleInProgress,\n selectSaveUserToGeneralRoleStatus,\n selectUserInviteInProgress,\n selectUserInviteStatus,\n selectUserInvited,\n} from '@main-application/administration/selectors/administration.selectors';\nimport { UserPreview, UserPreviewFields } from '@main-application/administration/users/config/enums/user-preview';\nimport { getCompanyList } from '@main-application/turnovers/actions/turnovers.actions';\nimport { selectCompanyList, selectCompanyListLoading } from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UserType } from '@shared/enums/user-type';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { InviteRestUserModel, RestUserModel } from '@shared/interfaces/user.interface';\nimport { selectNativeLanguagesEnumeration } from '@shared/selectors/enumeration.selectors';\nimport { selectUserData } from '@shared/selectors/user.selectors';\nimport { UserExistsValidator } from '@shared/validators/user-exists.validator';\nimport { UserInactiveValidator } from '@shared/validators/user-inactive.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { EmailPatternValidator } from '@ui-components/validators/email.validator';\n\nexport interface AddVendorUserModalData {\n vendorId?: number;\n header?: string;\n}\n\nexport interface AddVendorUserModalResult {\n invitedUser: RestUserModel;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-vendor-user-modal',\n templateUrl: './add-vendor-user-modal.component.html',\n styleUrls: ['./add-vendor-user-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AddVendorUserModalComponent extends AdministrationAbstract implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n selectedProperties: PropertyBasicInfo[] = [];\n propertiesToSelect: PropertyBasicInfo[] = [];\n arePropertiesChanged = false;\n root = [];\n warningMessage = '';\n companyRadioList: IRadioButtonOption[] = [];\n nativeLanguages: IRadioButtonOption[] = [];\n companyListLoading$: Observable;\n userToPropertyMapping: UserToPropertyMapping[];\n vendorRoleId: number;\n header: string;\n saveButtonText: string;\n formSubmitted = false;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected store: Store<{}>,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: AddVendorUserModalData,\n private formBuilder: FormBuilder,\n private snackbarService: SnackbarService\n ) {\n super(cdr, store);\n\n this.header = data.header;\n this.saveButtonText = data.vendorId ? 'Add and Assign' : 'Send invitation';\n }\n\n get firstName(): FormControl {\n return this.form.get(UserPreviewFields.FirstName) as FormControl;\n }\n\n get lastName(): FormControl {\n return this.form.get(UserPreviewFields.LastName) as FormControl;\n }\n\n get email(): FormControl {\n return this.form.get(UserPreviewFields.Email) as FormControl;\n }\n\n get companyId(): FormControl {\n return this.form.get(UserPreviewFields.CompanyId) as FormControl;\n }\n\n get phoneNumber(): FormControl {\n return this.form.get(UserPreviewFields.PhoneNumber) as FormControl;\n }\n\n get nativeLanguage(): FormControl {\n return this.form.get(UserPreviewFields.NativeLanguage) as FormControl;\n }\n\n ngOnInit(): void {\n this.initForm();\n this.store.dispatch(getCompanyList());\n this.store.dispatch(loadAllGeneralRoles());\n this.companyListLoading$ = this.store.select(selectCompanyListLoading);\n\n this.store\n .select(selectAllGeneralRoles)\n .pipe(untilDestroyed(this), filter(Boolean))\n .subscribe(allRoles => (this.vendorRoleId = allRoles.find(e => e.roleName == VENDOR_ROLE_NAME)?.id));\n\n this.store\n .select(selectNativeLanguagesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(values => {\n this.nativeLanguages = getEnumerationRadioListFunction(values, null, false);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.companyRadioList = getCompanyRadioList(companyList);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe();\n\n combineLatest([this.store.select(selectAllUsersWithGeneralRoles), this.store.select(selectInactiveUsers)])\n .pipe(\n untilDestroyed(this),\n filter(([allUsers, inactiveUsers]) => !!allUsers && !!inactiveUsers),\n tap(([allUsers, inactiveUsers]: [UserWithGeneralRole[], RestUserModel[]]) => {\n const existingActiveEmails = allUsers.map(item => item.email);\n const existingInactiveEmails = inactiveUsers.map(item => item.email);\n this.email.addValidators(UserExistsValidator(existingActiveEmails));\n this.email.addValidators(UserInactiveValidator(existingInactiveEmails));\n })\n )\n .subscribe();\n\n combineLatest([\n this.store.select(selectAllPropertiesStructure),\n this.store.select(selectAllUserToPropertyMappings),\n this.store.select(selectUserData),\n ])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(\n ([allProperties, userToPropertyMapping, userData]) => !!allProperties && !!userToPropertyMapping && !!userData\n ),\n tap(([allProperties, userToPropertyMapping, userData]) => {\n this.userToPropertyMapping = userToPropertyMapping;\n this.root = formatPropertyStructureToTree(allProperties);\n this.propertiesToSelect = combineUserWithProperties(userData.id, allProperties, userToPropertyMapping);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.inProgress$ = combineLatest([\n this.store.select(selectUserInviteInProgress),\n this.store.select(selectSaveUserToGeneralRoleInProgress),\n this.store.select(selectAssignUserIntoPropertyInProgress),\n ]).pipe(map(operationsInProgress => some(operationsInProgress, Boolean)));\n\n combineLatest([\n this.store.select(selectUserInvited),\n this.store.select(selectUserInviteStatus),\n this.store.select(selectSaveUserToGeneralRoleStatus),\n this.store.select(selectAssignUserIntoPropertyStatus),\n ])\n .pipe(\n untilDestroyed(this),\n filter(\n ([invitedUser, userInviteStatus, saveUserToGeneralRoleStatus, assignUserIntoPropertyStatus]) =>\n invitedUser &&\n userInviteStatus === UpdateStatus.OK &&\n saveUserToGeneralRoleStatus === UpdateStatus.UPDATED &&\n assignUserIntoPropertyStatus === UpdateStatus.UPDATED\n )\n )\n .subscribe(([invitedUser]) => {\n const company = this.companyRadioList.find(c => c.value === invitedUser.companyId);\n this.snackbarService.success(`${invitedUser.displayName} added to ${company?.label}`);\n this.close(DialogResult.Success, invitedUser);\n });\n\n if (this.data.vendorId) {\n this.companyId.setValue(this.data.vendorId);\n }\n }\n\n save() {\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const { firstName, lastName, email, userGroupType, companyId, phoneNumber, nativeLanguage } = this.form\n .value as UserPreview;\n let selectedProperty: number[] = [];\n const inviteUser: InviteRestUserModel = {\n email,\n firstName,\n lastName,\n userGroupType: UserType.Contractor,\n displayName: `${firstName} ${lastName}`,\n companyId,\n phoneNumber,\n nativeLanguage,\n };\n\n if (this.arePropertiesChanged) {\n selectedProperty = this.selectedProperties.map(item => item.id);\n }\n\n this.store.dispatch(inviteNewUser({ user: inviteUser, roleId: this.vendorRoleId, selectedProperty }));\n }\n\n close(result: DialogResult = DialogResult.Fail, invitedUser?: RestUserModel) {\n if (result === DialogResult.Fail) {\n this.dialogRef.close();\n } else {\n this.dialogRef.close({\n invitedUser,\n });\n }\n }\n\n ngOnDestroy(): void {\n this.store.dispatch(clearUserPreviewData());\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [UserPreviewFields.FirstName]: [null, [Validators.required, Validators.maxLength(24)]],\n [UserPreviewFields.LastName]: [null, [Validators.required, Validators.maxLength(24)]],\n [UserPreviewFields.Email]: [null, [Validators.required, EmailPatternValidator(), Validators.email]],\n [UserPreviewFields.CompanyId]: [null, [Validators.required]],\n [UserPreviewFields.PhoneNumber]: [null, [Validators.pattern('[- +()0-9]+')]],\n [UserPreviewFields.NativeLanguage]: [0, Validators.required],\n });\n }\n\n selectedRootsChange($event: PropertyBasicInfo[]) {\n this.arePropertiesChanged = true;\n this.selectedProperties = $event;\n }\n}\n","
    \n
    \n

    Pictures ({{ attachments?.length || 0 }})

    \n \n
    \n\n \n
    \n
    \n
      \n
    • \n \n \n \n \n
    • \n
    \n
    \n
    \n
    \n
    \n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport Viewer from 'viewerjs';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { deleteUnitAttachment } from '@portfolio/actions/portfolio.actions';\nimport { selectDeleteUnitAttachmentInProgress } from '@portfolio/selectors/portfolio.selectors';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { GalleryItem } from '@shared/interfaces/gallery-item';\n\nimport Options = Viewer.Options;\n\n@UntilDestroy()\n@Component({\n selector: 'app-gallery-modal',\n templateUrl: './gallery-modal.component.html',\n styleUrls: ['./gallery-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GalleryModalComponent extends ComponentAbstract implements OnInit, AfterViewInit, OnDestroy {\n attachments: RestGenericTypedAttachment[] = [];\n title = '';\n content = '';\n\n deleteAttachmentInProgress$: Observable;\n viewer: Viewer;\n viewerOptions: Options = {\n toolbar: {\n zoomIn: 4,\n zoomOut: 4,\n oneToOne: 4,\n reset: 4,\n prev: 4,\n play: {\n show: 4,\n size: 'large',\n },\n next: 4,\n rotateLeft: false,\n rotateRight: false,\n flipHorizontal: false,\n flipVertical: false,\n },\n };\n\n @ViewChild('imagesList', { read: ElementRef }) imagesList: ElementRef;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: GalleryItem,\n private store: Store<{}>\n ) {\n super(cdr);\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n ngOnInit(): void {\n this.deleteAttachmentInProgress$ = this.store.select(selectDeleteUnitAttachmentInProgress);\n\n this.data?.attachmentsBSubject\n .pipe(\n untilDestroyed(this),\n tap((attachments: RestGenericTypedAttachment[]) => {\n this.attachments = attachments;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.getDeleteConfirmationLabels();\n }\n\n ngAfterViewInit(): void {\n // @ts-ignore\n this.viewer = new Viewer(this.imagesList.nativeElement, this.viewerOptions);\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n if (this.viewer) {\n this.viewer.destroy();\n }\n }\n\n deleteItem(attachment: RestGenericTypedAttachment) {\n this.store.dispatch(deleteUnitAttachment({ unitId: this.data.unitId, attachment }));\n }\n\n private getDeleteConfirmationLabels() {\n switch (this.data.attachmentType) {\n case UnitAttachmentType.Photo:\n {\n this.title = `Removal of the unit photo`;\n this.content = 'Are you sure you want to remove the unit photo?';\n }\n break;\n\n case UnitAttachmentType.FloorPlan:\n {\n this.title = `Removal of the unit floor plan`;\n this.content = 'Are you sure you want to remove the unit floor plan?';\n }\n break;\n }\n }\n}\n","
    \n
    \n
    {{ data?.title }}
    \n
    \n\n \n
    \n \n
    \n
    \n \n \n \n
    \n\n\n
    {{ data?.content || '' }}
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { ModalData } from '@shared/interfaces/modal-data';\n\n@Component({\n selector: 'app-info-modal',\n templateUrl: './info-modal.component.html',\n styleUrls: ['./info-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class InfoModalComponent extends ComponentAbstract implements OnInit {\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: ModalData\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {}\n\n confirm() {\n this.dialogRef.close();\n }\n}\n","
    \n
    \n
    \n Choose new assignee for {{ data.nextWorkflowStep | enumerationValue: workflowStepList }}\n
    \n
    \n\n \n
    \n
    \n \n\n \n\n remember my choice \n
    \n\n
    \n \n \n
    \n Done\n \n
    \n \n
    \n
    \n \n Over this message?\n \n Choose all assignees here\n \n \n
    \n
    \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { UserService } from '@app/services/user.service';\nimport { selectUpdateStepAssigneeInProgress } from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestTurnoverDataModel } from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\n\nexport class NextStepAssigneeModalData {\n nextWorkflowStep: WorkflowStepEnumType;\n turnoverData: RestTurnoverDataModel;\n propertyId: number;\n propertyName: string;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-next-step-assignee-modal',\n templateUrl: './next-step-assignee-modal.component.html',\n styleUrls: ['./next-step-assignee-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NextStepAssigneeModalComponent implements OnInit, OnDestroy {\n form = this.formBuilder.group({\n assigneeId: [null as number, [Validators.required]],\n rememberIt: [false as boolean],\n });\n\n userListModel: RestUserModel[] = [];\n propertyUserListLoading$ = new BehaviorSubject(true);\n updateInProgress$: Observable;\n currentWorkflowStep: WorkflowStepEnumType;\n ManagementRoute = ManagementRoute;\n workflowStepList: IRadioButtonOption[] = WorkflowStepListConst;\n\n get propertyId() {\n return this.data.propertyId ?? this.data.turnoverData.property.id;\n }\n get propertyName() {\n return this.data.propertyName ?? this.data.turnoverData.property.name;\n }\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected store: Store<{}>,\n protected activatedRoute: ActivatedRoute,\n protected formBuilder: FormBuilder,\n private userService: UserService,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: NextStepAssigneeModalData\n ) {\n this.currentWorkflowStep = this.data.turnoverData.activeWorkflowStepType;\n }\n\n ngOnInit(): void {\n this.updateInProgress$ = this.store.select(selectUpdateStepAssigneeInProgress);\n\n this.propertyUserListLoading$.next(true);\n this.userService\n .getCachedPropertyUserList(this.propertyId, true)\n .pipe(untilDestroyed(this))\n .subscribe(userListModel => {\n this.propertyUserListLoading$.next(false);\n this.userListModel = userListModel;\n this.cdr.detectChanges();\n });\n }\n\n close() {\n this.dialogRef.close();\n }\n\n ngOnDestroy(): void {}\n\n save() {\n const { assigneeId, rememberIt } = this.form.value;\n const workflowAction: WorkflowAction = {\n turnoverId: this.data.turnoverData.id,\n nextWorkflowStep: this.data.nextWorkflowStep,\n assigneeId,\n rememberIt,\n };\n\n this.dialogRef.close(workflowAction);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { CustomInspectionHeaderComponent } from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-header/custom-inspection-header.component';\nimport { InputComponent } from '@ui-components/components/input/input.component';\n\nexport interface PromptModalData {\n title: string;\n fieldName: string;\n fieldPlaceholder?: string;\n}\n\nexport interface PromptModalResult {\n value: string;\n}\n\n@Component({\n selector: 'app-prompt-modal',\n templateUrl: './prompt-modal.component.html',\n styleUrls: ['./prompt-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PromptModalComponent implements OnInit, AfterViewInit {\n form: UntypedFormGroup;\n isSubmitted: boolean;\n\n @ViewChild(InputComponent) input: InputComponent;\n\n get displayName() {\n return this.form.controls.displayName as UntypedFormControl;\n }\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: PromptModalData,\n private formBuilder: UntypedFormBuilder\n ) {}\n\n ngOnInit(): void {\n this.initForm();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.input?.focus();\n }, 0);\n }\n\n cancel() {\n this.dialogRef.close(null);\n }\n\n save() {\n this.isSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n this.dialogRef.close({ value: this.form.controls.displayName.value });\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n displayName: [null, [Validators.required]],\n });\n }\n}\n","
    \n

    {{ data.title }}

    \n \n
    \n
    \n \n
    \n
    \n
    \n \n \n \n \n
    \n","import { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\n\nexport function getAttachmentToEntityParams(\n attachmentItem: AttachmentItem,\n ticketId: number\n): UpdateTypedAttachmentToEntityModel {\n let params: UpdateTypedAttachmentToEntityModel = {\n description: '',\n externalUrl: '',\n title: '',\n unitId: 0,\n propertyId: 0,\n portfolioId: 0,\n turnoverIds: [],\n applianceId: 0,\n bidId: 0,\n ticketId: ticketId,\n attachmentType: TicketAttachmentType.Attachment,\n };\n\n if (attachmentItem?.link) {\n params = {\n ...params,\n externalUrl: attachmentItem.link,\n };\n } else {\n params = {\n ...params,\n fileUploadId: attachmentItem?.upload?.id,\n title: attachmentItem?.upload?.originalFileName,\n description: attachmentItem?.upload?.originalFileName,\n };\n }\n\n return params;\n}\n","import { createSelector } from '@ngrx/store';\n\nimport { fileUploadFeatureKey } from '@shared/reducers/file-upload.reducer';\nimport { selectCoreModule } from '@shared/selectors/core.selector';\n\nconst selectFileUploadState = createSelector(selectCoreModule, coreState => coreState[fileUploadFeatureKey]);\n\n/**\n * select uploaded file params\n */\nexport const selectUploadedFileParams = createSelector(\n selectFileUploadState,\n fileUploadState => fileUploadState?.uploadedFileItem\n);\n\n/**\n * select file to upload loading\n */\nexport const selectFileToUploadLoading = createSelector(\n selectFileUploadState,\n fileUploadState => fileUploadState.fileToUploadLoading\n);\n\n/**\n * select delete status\n */\nexport const selectDeleteStatus = createSelector(\n selectFileUploadState,\n fileUploadState => fileUploadState.deleteStatus\n);\n","
    \n
    \n \n
    \n\n \n
    \n
    \n
    \n
    \n \n \n \n
    \n \n \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n Mark as done\n \n
    \n \n\n \n
    \n {{ data.isNew ? 'Create' : 'Save changes' }}\n \n
    \n \n
    \n
    \n
    \n\n\n
    New ticket:
    \n \n
    \n\n \n\n\n\n
    {{ data?.propertyName || '' }} - {{ data?.unitName }}
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable, combineLatest } from 'rxjs';\nimport { delay, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { loadPropertyUsers } from '@main-application/administration/actions/administration.actions';\nimport {\n selectPropertyUsers,\n selectPropertyUsersLoading,\n} from '@main-application/administration/selectors/administration.selectors';\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport {\n addNewTurnoverTicket,\n clearAddedTicketAttachment,\n clearTicketPreview,\n deleteFileFromRepository,\n deleteTurnoverTicketAttachment,\n getTicket,\n getTicketAttachments,\n setTicketAttachment,\n updateTicketPreview,\n} from '@main-application/turnovers/actions/turnovers.actions';\nimport { TurnoverForm } from '@main-application/turnovers/config/enums/turnover-form';\nimport {\n selectAddedTicketAttachment,\n selectNewTurnoverTicket,\n selectNewTurnoverTicketLoading,\n selectTicket,\n selectTicketAttachments,\n selectTicketUpdateInProgress,\n selectTicketUpdateInProgressStatus,\n} from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { deleteFile } from '@shared/actions/file-upload.actions';\nimport { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { getDateObjectFunction } from '@shared/functions/get-date-object.function';\nimport { getAttachmentToEntityParams } from '@shared/functions/ticket-attachment.utils';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { ListUpdateAction } from '@shared/interfaces/list-update-action.interface';\nimport { TicketPreviewForm } from '@shared/interfaces/turnover-form.interface';\nimport { RestTicketModel, RestTypedTicketAttachment } from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { TurnoverAttachmentPipe } from '@shared/pipes/turnover-attachment.pipe';\nimport { selectDeleteStatus } from '@shared/selectors/file-upload.selectors';\nimport { selectUserData } from '@shared/selectors/user.selectors';\n\n@UntilDestroy()\n@Component({\n selector: 'app-ticket-preview-modal',\n templateUrl: './ticket-preview-modal.component.html',\n styleUrls: ['./ticket-preview-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class TicketPreviewModalComponent extends ComponentAbstract implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n updateInProgress$: Observable;\n addNewInProgress$: Observable;\n propertyUserListLoading$: Observable;\n users: RestUserModel[] = [];\n attachmentItems: RestGenericTypedAttachment[] = [];\n cleanInputAttachment: EventEmitter = new EventEmitter();\n ticket: RestTicketModel = null;\n newAttachmentItem: AttachmentItem = null;\n isTicketDone = false;\n formSubmitted = false;\n\n @ViewChild('attachments', { read: ElementRef, static: false }) attachments: ElementRef;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: ListUpdateAction,\n private formBuilder: UntypedFormBuilder,\n private store: Store<{}>,\n private turnoverAttachmentPipe: TurnoverAttachmentPipe,\n private timezoneService: TimezoneService\n ) {\n super(cdr);\n }\n\n get name(): UntypedFormControl {\n return this.form?.get(TurnoverForm.NAME) as UntypedFormControl;\n }\n\n get detailedInformation(): UntypedFormControl {\n return this.form.get(TurnoverForm.DETAILED_INFORMATION) as UntypedFormControl;\n }\n\n get assigneeId(): UntypedFormControl {\n return this.form.get(TurnoverForm.ASSIGNEE_ID) as UntypedFormControl;\n }\n\n get end(): UntypedFormControl {\n return this.form?.get(TurnoverForm.END) as UntypedFormControl;\n }\n\n get ticketPriorityType(): UntypedFormControl {\n return this.form.get(TurnoverForm.TICKET_PRIORITY_TYPE) as UntypedFormControl;\n }\n\n get ticketStatusType(): UntypedFormControl {\n return this.form.get(TurnoverForm.TICKET_STATUS_TYPE) as UntypedFormControl;\n }\n\n get ableToResolve(): UntypedFormControl {\n return this.form?.get(TurnoverForm.ABLE_TO_RESOLVE) as UntypedFormControl;\n }\n\n ngOnDestroy(): void {\n this.store.dispatch(clearTicketPreview());\n }\n\n ngOnInit(): void {\n if (this.data?.isNew) {\n this.initForm();\n } else {\n this.store.dispatch(getTicket({ ticketId: this.data?.ticketId }));\n }\n this.updateInProgress$ = this.store.select(selectTicketUpdateInProgress);\n this.addNewInProgress$ = this.store.select(selectNewTurnoverTicketLoading);\n this.store.dispatch(loadPropertyUsers({ propertyId: this.data?.propertyId }));\n this.propertyUserListLoading$ = this.store.select(selectPropertyUsersLoading);\n\n this.store\n .select(selectPropertyUsers)\n .pipe(\n untilDestroyed(this),\n filter(users => !!users),\n tap(users => {\n this.users = users;\n })\n )\n .subscribe();\n\n combineLatest([this.store.select(selectUserData), this.store.select(selectTicket)])\n .pipe(\n untilDestroyed(this),\n filter(([userData, ticket]) => !!userData && !!ticket),\n tap(([userData, ticket]) => {\n this.ticket = ticket;\n this.userData = userData;\n this.attachmentItems = this.turnoverAttachmentPipe.transform(\n this.ticket?.allAttachments,\n TicketAttachmentType.Attachment\n );\n this.initForm();\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectAddedTicketAttachment)\n .pipe(\n untilDestroyed(this),\n filter((addedTicketAttachment: RestTypedTicketAttachment) => !!addedTicketAttachment),\n tap((addedTicketAttachment: RestTypedTicketAttachment) => {\n this.cleanInputAttachment.emit();\n this.store.dispatch(clearAddedTicketAttachment());\n if (this.ticket?.id) {\n this.store.dispatch(getTicketAttachments({ ticketId: this.ticket.id }));\n }\n })\n )\n .subscribe();\n\n this.store\n .select(selectTicketAttachments)\n .pipe(\n untilDestroyed(this),\n filter(ticketAttachments => !!ticketAttachments),\n tap((ticketAttachments: RestTypedTicketAttachment[]) => {\n this.attachmentItems = this.turnoverAttachmentPipe.transform(\n ticketAttachments.map(item => {\n return {\n ...item,\n targetAttachmentType: item.ticketAttachmentType,\n };\n }),\n TicketAttachmentType.Attachment\n );\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectTicketUpdateInProgressStatus)\n .pipe(\n untilDestroyed(this),\n filter(status => status === UpdateStatus.UPDATE),\n delay(300),\n tap(() => {\n this.dialogRef.close();\n })\n )\n .subscribe();\n\n this.store\n .select(selectNewTurnoverTicket)\n .pipe(\n untilDestroyed(this),\n filter((newTurnoverTicket: RestTicketModel) => !!newTurnoverTicket),\n tap((newTurnoverTicket: RestTicketModel) => {\n if (this.newAttachmentItem) {\n this.store.dispatch(\n setTicketAttachment({\n ticketType: TicketType.Ticket,\n attachmentToEntity: getAttachmentToEntityParams(this.newAttachmentItem, newTurnoverTicket.id),\n })\n );\n this.newAttachmentItem = null;\n this.store.dispatch(clearAddedTicketAttachment());\n }\n this.dialogRef.close();\n })\n )\n .subscribe();\n\n this.store\n .select(selectDeleteStatus)\n .pipe(\n untilDestroyed(this),\n filter((status: UpdateStatus) => status === UpdateStatus.DELETED),\n tap(() => {\n this.clearNewTicketAttachment();\n })\n )\n .subscribe();\n }\n\n deleteTicketAttachment(attachment: RestGenericTypedAttachment) {\n const ticketType = TicketType.Ticket;\n this.store.dispatch(deleteTurnoverTicketAttachment({ ticketType, attachment, ticketId: this.ticket.id }));\n }\n\n deleteNewTicketAttachment() {\n if (this.newAttachmentItem?.upload) {\n this.store.dispatch(deleteFile({ fileId: this.newAttachmentItem?.upload?.id }));\n } else {\n this.clearNewTicketAttachment();\n }\n }\n\n addTicketAttachment(attachmentItem: AttachmentItem) {\n if (this.data?.isNew) {\n if (attachmentItem?.upload?.id !== this.newAttachmentItem?.upload?.id && this.newAttachmentItem?.upload?.id) {\n this.store.dispatch(deleteFileFromRepository({ fileId: this.newAttachmentItem?.upload?.id }));\n }\n this.newAttachmentItem = attachmentItem;\n if (this.attachments) {\n setTimeout(() => {\n this.attachments.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }, 0);\n }\n this.cdr.detectChanges();\n } else {\n this.store.dispatch(\n setTicketAttachment({\n ticketType: TicketType.Ticket,\n attachmentToEntity: getAttachmentToEntityParams(attachmentItem, this.ticket.id),\n })\n );\n }\n }\n\n cancel() {\n if (this.newAttachmentItem?.upload) {\n this.store.dispatch(deleteFile({ fileId: this.newAttachmentItem?.upload?.id }));\n }\n this.dialogRef.close();\n }\n\n save() {\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const formValue: TicketPreviewForm = this.form.value;\n const turnoverTicket: RestTicketModel = {\n ...this.ticket,\n id: formValue[TurnoverForm.ID],\n endDate: formValue[TurnoverForm.END],\n name: formValue[TurnoverForm.NAME],\n detailedInformation: formValue[TurnoverForm.DETAILED_INFORMATION],\n assigneeId: formValue[TurnoverForm.ASSIGNEE_ID],\n ticketPriorityType: formValue[TurnoverForm.TICKET_PRIORITY_TYPE],\n turnoverId: this.data.isNew ? this.data.turnoverId : this.ticket.turnoverId,\n };\n\n if (this.data.isNew) {\n this.store.dispatch(addNewTurnoverTicket({ turnoverTicket }));\n } else {\n this.store.dispatch(updateTicketPreview({ turnoverTicket }));\n }\n }\n\n markAsDone() {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const formValue: TicketPreviewForm = this.form.value;\n const turnoverTicket: RestTicketModel = {\n ...this.ticket,\n detailedInformation: formValue[TurnoverForm.DETAILED_INFORMATION],\n assigneeId: formValue[TurnoverForm.ASSIGNEE_ID],\n ticketPriorityType: formValue[TurnoverForm.TICKET_PRIORITY_TYPE],\n dateCompleted: this.timezoneService.getCurrentDate(),\n ticketStatusType: TicketStatusType.Done,\n };\n\n this.store.dispatch(updateTicketPreview({ turnoverTicket }));\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [TurnoverForm.ID]: [this.ticket?.id || 0],\n [TurnoverForm.NAME]: [this.ticket?.name || null, [Validators.required, Validators.maxLength(50)]],\n [TurnoverForm.DETAILED_INFORMATION]: [\n this.ticket?.detailedInformation || null,\n [Validators.required, Validators.maxLength(1000)],\n ],\n [TurnoverForm.ASSIGNEE_ID]: [this.ticket?.assigneeId || this.data.stepAssigneeId, [Validators.required]],\n [TurnoverForm.END]: [getDateObjectFunction(this.ticket?.endDate || new Date()), [Validators.required]],\n [TurnoverForm.TICKET_PRIORITY_TYPE]: [\n this.ticket?.ticketPriorityType || PriorityType.Medium,\n [Validators.required],\n ],\n [TurnoverForm.TICKET_STATUS_TYPE]: [this.ticket?.ticketStatusType || TicketStatusType.NotDone], // todo - add [Validators.required]\n [TurnoverForm.ABLE_TO_RESOLVE]: [\n this.ticket?.createdBy?.id === this.userData?.id ||\n checkPermissionLevel(this.userData?.permissionLevel || [], [\n PermissionLevelType.Tickets_EditAll,\n PermissionLevelType.PropertyManager_ActiveTurnovers_Edit,\n ]),\n ],\n });\n this.isTicketDone = this.ticketStatusType.value === TicketStatusType.Done;\n }\n\n private clearNewTicketAttachment() {\n this.cleanInputAttachment.emit();\n this.newAttachmentItem = null;\n this.cdr.detectChanges();\n }\n}\n","
    \n
    \n
    {{ header }}
    \n
    \n\n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n\n
    \n \n
    \n \n
    \n
    \n\n
    \n \n \n
    \n\n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { some } from 'lodash';\nimport { Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\n\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport {\n clearUserPreviewData,\n inviteNewUser,\n loadAllGeneralRoles,\n updateUserData,\n} from '@main-application/administration/actions/administration.actions';\nimport { VENDOR_ROLE_NAME } from '@main-application/administration/constants/vendor-role-name.constant';\nimport { combineUserWithProperties } from '@main-application/administration/functions/combineUserWithProperties';\nimport { formatPropertyStructureToTree } from '@main-application/administration/functions/propertyStructureToTree';\nimport { prepareSelectedUserToPropertyMappings } from '@main-application/administration/functions/userToPropertyMappingHandlers';\nimport {\n selectAllPropertiesStructure,\n selectAllUserToPropertyMappings,\n selectAllUsersWithGeneralRoles,\n selectAssignUserIntoPropertyInProgress,\n selectAssignUserIntoPropertyStatus,\n selectInactiveUsers,\n selectRemovingPropertyAssignedUserInProgress,\n selectRemovingPropertyAssignedUserStatus,\n selectSaveUserToGeneralRoleInProgress,\n selectSaveUserToGeneralRoleStatus,\n selectUserInviteInProgress,\n selectUserInviteStatus,\n selectUserInvited,\n selectUserUpdateInProgress,\n selectUserUpdateStatus,\n} from '@main-application/administration/selectors/administration.selectors';\nimport { UserPreview, UserPreviewFields } from '@main-application/administration/users/config/enums/user-preview';\nimport { getCompanyList } from '@main-application/turnovers/actions/turnovers.actions';\nimport { selectCompanyList, selectCompanyListLoading } from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { loadAllUserPortfolios } from '@portfolio/actions/portfolio.actions';\nimport { loadAllUserProperties } from '@shared/actions/user.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UserType } from '@shared/enums/user-type';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { UserWithProperties } from '@shared/interfaces/user-with-properties';\nimport { InviteRestUserModel, RestUserModel, UpdateRestUserModel } from '@shared/interfaces/user.interface';\nimport { selectNativeLanguagesEnumeration } from '@shared/selectors/enumeration.selectors';\nimport { selectUserData } from '@shared/selectors/user.selectors';\nimport { UserExistsValidator } from '@shared/validators/user-exists.validator';\nimport { UserInactiveValidator } from '@shared/validators/user-inactive.validator';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\nimport { EmailPatternValidator } from '@ui-components/validators/email.validator';\n\nexport interface UserPreviewModalData {\n vendorId?: number;\n header?: string;\n user: UserWithGeneralRole;\n}\n\nexport interface UserPreviewModalResult {\n invitedUser: RestUserModel;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-user-preview-modal',\n templateUrl: './user-preview-modal.component.html',\n styleUrls: ['./user-preview-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class UserPreviewModalComponent extends AdministrationAbstract implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n warningMessage = '';\n selectedProperties: PropertyBasicInfo[] = [];\n propertiesToSelect: PropertyBasicInfo[] = [];\n arePropertiesChanged = false;\n root = [];\n isSubmitted = false;\n nativeLanguages: IRadioButtonOption[] = [];\n companyRadioList: IRadioButtonOption[] = [];\n companyListLoading$: Observable;\n\n userToPropertyMapping: UserToPropertyMapping[];\n selectedUsersWithProperties: UserWithProperties[];\n\n header: string;\n saveButtonText: string;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected store: Store<{}>,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: UserPreviewModalData,\n private formBuilder: FormBuilder,\n private modalsService: ModalsService\n ) {\n super(cdr, store);\n\n this.header = data.header || (data.user ? 'Edit user' : 'Add new user');\n this.saveButtonText = data.vendorId ? 'Add and Assignee' : data.user ? 'Save' : 'Send invitation';\n }\n\n get firstName(): FormControl {\n return this.form.get(UserPreviewFields.FirstName) as FormControl;\n }\n\n get lastName(): FormControl {\n return this.form.get(UserPreviewFields.LastName) as FormControl;\n }\n\n get email(): FormControl {\n return this.form.get(UserPreviewFields.Email) as FormControl;\n }\n\n get userGroupType(): FormControl {\n return this.form.get(UserPreviewFields.UserGroupType) as FormControl;\n }\n\n get roleId(): FormControl {\n return this.form.get(UserPreviewFields.RoleId) as FormControl;\n }\n\n get companyId(): FormControl {\n return this.form.get(UserPreviewFields.CompanyId) as FormControl;\n }\n\n get phoneNumber(): FormControl {\n return this.form.get(UserPreviewFields.PhoneNumber) as FormControl;\n }\n\n get nativeLanguage(): FormControl {\n return this.form.get(UserPreviewFields.NativeLanguage) as FormControl;\n }\n\n ngOnInit(): void {\n this.initForm();\n this.store.dispatch(getCompanyList());\n this.store.dispatch(loadAllGeneralRoles());\n this.companyListLoading$ = this.store.select(selectCompanyListLoading);\n this.selectAllGeneralRoles().subscribe();\n this.selectGeneralRoleRadioList().subscribe();\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.companyRadioList = getCompanyRadioList(companyList);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectNativeLanguagesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(values => {\n this.nativeLanguages = getEnumerationRadioListFunction(values, null, false);\n if (this.data.user) {\n this.nativeLanguage.setValue(this.data.user.nativeLanguage);\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe();\n\n combineLatest([this.store.select(selectAllUsersWithGeneralRoles), this.store.select(selectInactiveUsers)])\n .pipe(\n untilDestroyed(this),\n filter(([allUsers, inactiveUsers]) => !!allUsers && !!inactiveUsers),\n tap(([allUsers, inactiveUsers]: [UserWithGeneralRole[], RestUserModel[]]) => {\n const existingActiveEmails = allUsers.map(item => item.email);\n const existingInactiveEmails = inactiveUsers.map(item => item.email);\n\n if (!this.data.user) {\n this.email.addValidators(UserExistsValidator(existingActiveEmails));\n this.email.addValidators(UserInactiveValidator(existingInactiveEmails));\n }\n })\n )\n .subscribe();\n\n combineLatest([this.store.select(selectAllPropertiesStructure), this.store.select(selectAllUserToPropertyMappings)])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(([allProperties, userToPropertyMapping]) => !!allProperties && !!userToPropertyMapping),\n tap(([allProperties, userToPropertyMapping]) => {\n this.userToPropertyMapping = userToPropertyMapping;\n this.root = formatPropertyStructureToTree(allProperties);\n\n if (this.data.user) {\n this.propertiesToSelect = combineUserWithProperties(\n this.data.user.id,\n allProperties,\n userToPropertyMapping\n );\n } else {\n const rootNodes = allProperties.filter(item => !item.parentId);\n this.propertiesToSelect = rootNodes;\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.userGroupType.valueChanges\n .pipe(\n untilDestroyed(this),\n tap((userGroupType: UserType) => {\n const validators = userGroupType === UserType.Contractor ? [Validators.required] : [];\n if (userGroupType === UserType.Contractor) {\n const vendroRole = this.userRoles.find(x => x.label === VENDOR_ROLE_NAME);\n if (vendroRole) {\n this.roleId.setValue(vendroRole.value);\n }\n } else {\n this.roleId.setValue(null);\n }\n this.companyId.setValidators(validators);\n this.companyId.updateValueAndValidity();\n })\n )\n .subscribe();\n\n if (this.data.user) {\n this.inProgress$ = combineLatest([\n this.store.select(selectUserUpdateInProgress),\n this.store.select(selectSaveUserToGeneralRoleInProgress),\n this.store.select(selectAssignUserIntoPropertyInProgress),\n this.store.select(selectRemovingPropertyAssignedUserInProgress),\n ]).pipe(map(operationsInProgress => some(operationsInProgress, Boolean)));\n\n combineLatest([\n this.store.select(selectUserUpdateStatus),\n this.store.select(selectSaveUserToGeneralRoleStatus),\n this.store.select(selectAssignUserIntoPropertyStatus),\n this.store.select(selectRemovingPropertyAssignedUserStatus),\n ])\n .pipe(\n untilDestroyed(this),\n filter(\n ([\n userUpdateStatus,\n saveUserToGeneralRoleStatus,\n assignUserIntoPropertyStatus,\n removingPropertyAssignedUserStatus,\n ]) =>\n userUpdateStatus === UpdateStatus.UPDATED &&\n saveUserToGeneralRoleStatus === UpdateStatus.UPDATED &&\n (this.arePropertiesChanged\n ? assignUserIntoPropertyStatus === UpdateStatus.UPDATED ||\n removingPropertyAssignedUserStatus === UpdateStatus.DELETED\n : true)\n ),\n tap(() => {\n if (this.arePropertiesChanged && this.userData?.id === this.data.user?.id) {\n this.store.dispatch(loadAllUserProperties());\n this.store.dispatch(loadAllUserPortfolios());\n }\n\n this.close(DialogResult.Success);\n })\n )\n .subscribe();\n } else {\n this.inProgress$ = combineLatest([\n this.store.select(selectUserInviteInProgress),\n this.store.select(selectSaveUserToGeneralRoleInProgress),\n this.store.select(selectAssignUserIntoPropertyInProgress),\n ]).pipe(map(operationsInProgress => some(operationsInProgress, Boolean)));\n\n combineLatest([\n this.store.select(selectUserInvited),\n this.store.select(selectUserInviteStatus),\n this.store.select(selectSaveUserToGeneralRoleStatus),\n this.store.select(selectAssignUserIntoPropertyStatus),\n ])\n .pipe(\n untilDestroyed(this),\n filter(\n ([invitedUser, userInviteStatus, saveUserToGeneralRoleStatus, assignUserIntoPropertyStatus]) =>\n invitedUser &&\n userInviteStatus === UpdateStatus.OK &&\n saveUserToGeneralRoleStatus === UpdateStatus.UPDATED &&\n assignUserIntoPropertyStatus === UpdateStatus.UPDATED\n )\n )\n .subscribe(([invitedUser]) => this.close(DialogResult.Success, invitedUser));\n }\n\n if (this.data.vendorId) {\n this.userGroupType.setValue(UserType.Contractor);\n this.companyId.setValue(this.data.vendorId);\n }\n }\n\n save() {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.isSubmitted = true;\n this.cdr.detectChanges();\n return;\n }\n\n const { firstName, lastName, roleId, email, userGroupType, companyId, nativeLanguage, phoneNumber } = this.form\n .value as UserPreview;\n let userToPropertyRoleList: UserToPropertyMapping[] = [];\n let deleteUserToPropertyMappings: number[] = [];\n let selectedProperty: number[] = [];\n\n const updateUser: UpdateRestUserModel = {\n id: this.data.user?.id || 0,\n firstName,\n lastName,\n companyId,\n nativeLanguage,\n phoneNumber,\n };\n\n const inviteUser: InviteRestUserModel = {\n email,\n firstName,\n lastName,\n userGroupType,\n displayName: `${firstName} ${lastName}`,\n companyId: userGroupType === UserType.Contractor ? companyId : null,\n nativeLanguage,\n phoneNumber,\n };\n\n const currentUserProperties = this.userToPropertyMapping?.filter(item => item.userId === this.data.user?.id);\n const currentUserPropertyIds = currentUserProperties\n ? currentUserProperties.map(item => item.propertyId)\n : [];\n\n if (this.arePropertiesChanged) {\n if (this.data.user) {\n const newUserToPropertyMappings = prepareSelectedUserToPropertyMappings(\n this.data.user,\n this.selectedProperties,\n roleId\n );\n\n const selectedPropertyIds = newUserToPropertyMappings.map(value => value.propertyId);\n\n const propertyToDelete = this.propertiesToSelect\n .filter(item => !selectedPropertyIds.includes(item.id))\n .map(item => item.id);\n\n deleteUserToPropertyMappings = currentUserProperties\n .filter(item => propertyToDelete.includes(item.propertyId))\n .map(item => item.id);\n\n userToPropertyRoleList = newUserToPropertyMappings.filter(\n item => !currentUserPropertyIds.includes(item.propertyId)\n );\n } else {\n selectedProperty = this.selectedProperties.map(item => item.id);\n }\n }\n\n if (this.data.user) {\n this.store.dispatch(\n updateUserData({ user: updateUser, roleId, userToPropertyRoleList, deleteUserToPropertyMappings })\n );\n } else {\n this.store.dispatch(inviteNewUser({ user: inviteUser, roleId, selectedProperty }));\n }\n }\n\n close(result: DialogResult = DialogResult.Fail, invitedUser?: RestUserModel) {\n if (result === DialogResult.Fail) {\n this.dialogRef.close();\n } else {\n this.dialogRef.close({\n invitedUser,\n });\n }\n }\n\n ngOnDestroy(): void {\n this.store.dispatch(clearUserPreviewData());\n }\n\n addNewVendor() {\n this.modalsService\n .openNewVendorModal({})\n .afterClosed()\n .pipe(\n tap(company => {\n if (company) {\n this.companyId.setValue(company.id);\n this.store.dispatch(getCompanyList());\n this.cdr.detectChanges();\n }\n })\n )\n .subscribe();\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [UserPreviewFields.FirstName]: [\n this.data.user?.firstName || null,\n [Validators.required, Validators.maxLength(24)],\n ],\n [UserPreviewFields.LastName]: [this.data.user?.lastName || null, [Validators.required, Validators.maxLength(24)]],\n [UserPreviewFields.Email]: [\n this.data.user?.email || null,\n [Validators.required, EmailPatternValidator(), Validators.email],\n ],\n [UserPreviewFields.UserGroupType]: [this.data.user?.userGroupType || UserType.Employee, [Validators.required]],\n [UserPreviewFields.RoleId]: [this.data.user?.roleId || null, [Validators.required]],\n [UserPreviewFields.CompanyId]: [\n this.data.user?.companyId,\n this.data.user?.userGroupType === UserType.Contractor ? [Validators.required] : [],\n ],\n [UserPreviewFields.PhoneNumber]: [this.data.user?.phoneNumber || null],\n [UserPreviewFields.NativeLanguage]: [this.data.user?.nativeLanguage || 0, [Validators.required]],\n });\n }\n\n selectedRootsChange($event: PropertyBasicInfo[]) {\n this.arePropertiesChanged = true;\n this.selectedProperties = $event;\n }\n}\n","import { filter, some } from 'lodash';\n\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithProperties } from '@shared/interfaces/user-with-properties';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n/* TODO: if Chris doesn't change back his mind change it to accept single user */\nexport function prepareSelectedUserToPropertyMappings(\n user: RestUserModel,\n selectedProperties: PropertyBasicInfo[],\n roleId: number\n): UserToPropertyMapping[] {\n return selectedProperties.map(item => {\n return {\n id: 0,\n roleId,\n userId: user.id,\n propertyId: item.id,\n };\n });\n}\n\nexport function prepareUserToPropertyMappingsToAdd(\n selectedUsersUserToPropertyCurrentMappings: UserToPropertyMapping[],\n newUserToPropertyMappings: UserToPropertyMapping[]\n): UserToPropertyMapping[] {\n return filter(\n newUserToPropertyMappings,\n mapping =>\n !some(selectedUsersUserToPropertyCurrentMappings, { userId: mapping.userId, propertyId: mapping.propertyId })\n );\n}\n\nexport function prepareUserToPropertyMappings(\n user: RestUserModel,\n selectedUsersWithProperties: UserWithProperties[]\n): UserWithProperties[] {\n return selectedUsersWithProperties?.filter(item => item.id === user.id);\n}\n\nexport function prepareUserToPropertyMappingsToRemove(\n selectedUsersUserToPropertyCurrentMappings: UserToPropertyMapping[],\n newUserToPropertyMappings: UserToPropertyMapping[]\n) {\n const selectedUsersUserToPropertyMappingsToDelete = filter(\n selectedUsersUserToPropertyCurrentMappings,\n mapping => !some(newUserToPropertyMappings, { userId: mapping.userId, propertyId: mapping.propertyId })\n );\n\n return selectedUsersUserToPropertyMappingsToDelete;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable, filter, take, tap } from 'rxjs';\n\nimport {\n addCompany,\n addCompanySuccess,\n addCompanyWithOwner,\n addCompanyWithOwnerSuccess,\n} from '@companies/actions/companies.actions';\nimport { selectAddCompanyWithOwnerLoading } from '@companies/selectors/companies.selectors';\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport { loadAllGeneralRoles } from '@main-application/administration/actions/administration.actions';\nimport { VENDOR_ROLE_NAME } from '@main-application/administration/constants/vendor-role-name.constant';\nimport {\n selectActiveUsers,\n selectAllGeneralRoles,\n} from '@main-application/administration/selectors/administration.selectors';\nimport { UserType } from '@shared/enums/user-type';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { InviteRestUserModel, RestUserModel } from '@shared/interfaces/user.interface';\nimport { selectNativeLanguagesEnumeration } from '@shared/selectors/enumeration.selectors';\nimport { UserExistsValidator } from '@shared/validators/user-exists.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { EmailPatternValidator } from '@ui-components/validators/email.validator';\n\nenum NewVendorFields {\n FirstName = 'firstName',\n LastName = 'lastName',\n Email = 'email',\n Company = 'company',\n PhoneNumber = 'phoneNumber',\n NativeLanguage = 'nativeLanguage',\n RoleId = 'roleId',\n}\n\ninterface NewVendor {\n [NewVendorFields.FirstName]: string;\n [NewVendorFields.LastName]: string;\n [NewVendorFields.Email]: string;\n [NewVendorFields.Company]: string;\n [NewVendorFields.PhoneNumber]: string;\n [NewVendorFields.NativeLanguage]: number;\n [NewVendorFields.RoleId]: number;\n}\n\nexport interface AddVendorModalData {\n addOnlyVendor?: boolean;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-vendor-modal',\n templateUrl: './add-vendor-modal.component.html',\n styleUrls: ['./add-vendor-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AddVendorModalComponent extends AdministrationAbstract implements OnInit {\n form: FormGroup;\n vendorRoleId: number;\n inProgress$: Observable;\n nativeLanguages: IRadioButtonOption[] = [];\n formSubmitted = false;\n\n constructor(\n public fb: FormBuilder,\n public dialogRef: MatDialogRef,\n store: Store<{}>,\n private actions$: Actions,\n private snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) public data: AddVendorModalData,\n cdr: ChangeDetectorRef\n ) {\n super(cdr, store);\n }\n\n get firstName(): FormControl {\n return this.form.get(NewVendorFields.FirstName) as FormControl;\n }\n\n get lastName(): FormControl {\n return this.form.get(NewVendorFields.LastName) as FormControl;\n }\n\n get email(): FormControl {\n return this.form.get(NewVendorFields.Email) as FormControl;\n }\n\n get company(): FormControl {\n return this.form.get(NewVendorFields.Company) as FormControl;\n }\n\n get phoneNumber(): FormControl {\n return this.form.get(NewVendorFields.PhoneNumber) as FormControl;\n }\n\n get nativeLanguage(): FormControl {\n return this.form.get(NewVendorFields.NativeLanguage) as FormControl;\n }\n\n ngOnInit(): void {\n this.store.dispatch(loadAllGeneralRoles());\n\n this.inProgress$ = this.store.select(selectAddCompanyWithOwnerLoading);\n\n if (this.data.addOnlyVendor) {\n this.form = this.fb.group({\n [NewVendorFields.Company]: ['', Validators.required],\n });\n } else {\n this.form = this.fb.group({\n [NewVendorFields.FirstName]: ['', Validators.required],\n [NewVendorFields.LastName]: ['', Validators.required],\n [NewVendorFields.Email]: ['', [Validators.required, Validators.email, EmailPatternValidator()]],\n [NewVendorFields.Company]: ['', Validators.required],\n [NewVendorFields.PhoneNumber]: ['', [Validators.pattern('[- +()0-9]+')]],\n [NewVendorFields.NativeLanguage]: [0, Validators.required],\n });\n }\n\n this.store\n .select(selectNativeLanguagesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(values => {\n this.nativeLanguages = getEnumerationRadioListFunction(values, null, false);\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.store\n .select(selectActiveUsers)\n .pipe(\n untilDestroyed(this),\n filter((allUsers: RestUserModel[]) => !!allUsers)\n )\n .subscribe((allUsers: RestUserModel[]) => {\n const existingEmails = allUsers.map(item => item.email);\n if (this.email) {\n this.email.addValidators([UserExistsValidator(existingEmails)]);\n }\n });\n\n this.store\n .select(selectAllGeneralRoles)\n .pipe(untilDestroyed(this), filter(Boolean))\n .subscribe(allRoles => (this.vendorRoleId = allRoles.find(e => e.roleName == VENDOR_ROLE_NAME)?.id));\n\n this.cdr.detectChanges();\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n send() {\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const value: NewVendor = this.form.value;\n\n const inviteUser: InviteRestUserModel = {\n email: value[NewVendorFields.Email],\n firstName: value[NewVendorFields.FirstName],\n lastName: value[NewVendorFields.LastName],\n userGroupType: UserType.Contractor,\n displayName: `${value.firstName} ${value.lastName}`,\n nativeLanguage: value[NewVendorFields.NativeLanguage],\n phoneNumber: value[NewVendorFields.PhoneNumber],\n };\n\n const companyModel: RestCompanyModel = {\n displayName: value.company,\n id: 0,\n employees: [],\n addresses: [],\n };\n\n if (this.data.addOnlyVendor) {\n this.store.dispatch(\n addCompany({\n companyModel,\n })\n );\n this.actions$\n .pipe(\n ofType(addCompanySuccess),\n take(1),\n tap(action => {\n this.snackbarService.success(`${action.companyModel.displayName} added`);\n this.dialogRef.close(action.companyModel);\n })\n )\n .subscribe();\n } else {\n this.store.dispatch(\n addCompanyWithOwner({\n user: inviteUser,\n roleId: this.vendorRoleId,\n companyModel,\n })\n );\n this.actions$\n .pipe(\n ofType(addCompanyWithOwnerSuccess),\n take(1),\n tap(action => {\n this.snackbarService.success(`${action.company.displayName} added`);\n this.dialogRef.close(action.company);\n })\n )\n .subscribe();\n }\n }\n}\n","
    \n

    Add vendor {{ data.addOnlyVendor ? '' : 'and employee' }}

    \n \n \n \n \n
    \n \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n","import { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-comment-too-long-modal',\n templateUrl: './comment-too-long-modal.component.html',\n})\nexport class CommentTooLongModalComponent implements OnInit {\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: number\n ) {}\n\n ngOnInit(): void {}\n\n cancel() {\n this.dialogRef.close();\n }\n}\n","
    \n

    Comment too long

    \n \n
    Please reduce to {{ data }} characters.
    \n
    \n \n \n \n
    \n","
    \n

    \n
    {{ data?.title }}
    \n

    \n \n
    \n {{ data?.content }}\n
    \n
    \n \n
    \n \n {{ doNotShowAgainMessage }}\n \n
    \n
    \n \n \n
    \n
    \n
    \n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { tap } from 'rxjs/operators';\n\nimport { ConfirmationModalData } from '@shared/interfaces/modal-data';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { DialogResult } from '../config/dialog-result.enum';\n\nconst CANCEL_DEFAULT_LABEL = 'Cancel';\nconst CANCEL_DEFAULT_COLOR = '';\nconst CONFIRM_DEFAULT_LABEL = 'OK';\nconst CONFIRM_DEFAULT_COLOR = 'primary';\n\n@UntilDestroy()\n@Component({\n selector: 'app-confirmation-modal',\n templateUrl: './confirmation-modal.component.html',\n styleUrls: ['./confirmation-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConfirmationModalComponent implements OnInit {\n cancelLabel: string;\n cancelColor: string;\n confirmLabel: string;\n confirmColor: 'primary' | 'warn';\n doNotShowAgain = new UntypedFormControl(false);\n doNotShowAgainMessage: string;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n private modalsService: ModalsService,\n private elementRef: ElementRef,\n @Inject(MAT_DIALOG_DATA) public data: ConfirmationModalData\n ) {}\n\n ngOnInit(): void {\n const overlay = this.elementRef.nativeElement.closest('.cdk-overlay-container');\n if (overlay) {\n overlay.style.zIndex = '1001';\n }\n this.cancelLabel = this.data.cancelLabel || CANCEL_DEFAULT_LABEL;\n this.cancelColor = this.data.cancelColor || CANCEL_DEFAULT_COLOR;\n this.confirmLabel = this.data.confirmLabel || CONFIRM_DEFAULT_LABEL;\n this.confirmColor = this.data.confirmColor || CONFIRM_DEFAULT_COLOR;\n this.doNotShowAgainMessage = this.data.doNotShowAgainMessage || \"Don't show again\";\n this.doNotShowAgain.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.modalsService.updateDialogHiddenState(value, this.data);\n })\n )\n .subscribe();\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n send() {\n this.dialogRef.close(DialogResult.Success);\n }\n}\n","
    \n
    \n
    Add new space
    \n
    \n\n \n
    \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n
    Name{{ spaceTemplate.name }}Turbo\n \n Steps{{ spaceTemplate.steps }}\n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport { RestSpaceTemplateModel } from '@main-application/space-template/models/rest-space-template-model.interface';\nimport { loadAllSpaceTemplates } from '@main-application/space-template/store/space-template.actions';\nimport { selectSpaceTemplates } from '@main-application/space-template/store/space-template.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { HelpRouterService } from '@shared/services/help-router.service';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { TEMPLATE_VIEWS } from '@template/models/template-views';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\n\n@UntilDestroy()\n@Component({\n selector: 'app-space-template-modal',\n templateUrl: './space-template-modal.component.html',\n styleUrls: ['./space-template-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class SpaceTemplateModalComponent extends AdministrationAbstract implements OnInit, OnDestroy {\n displayedColumns = ['name', 'isTurboMode', 'steps', 'actions'];\n dataSource$: Observable;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected router: Router,\n protected store: Store<{}>,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public templateDetails: RestTemplateModel,\n private helpRouterService: HelpRouterService\n ) {\n super(cdr, store);\n }\n\n ngOnInit(): void {\n this.dataSource$ = this.store.select(selectSpaceTemplates).pipe(\n untilDestroyed(this),\n tap(list => {\n if (!list) {\n this.store.dispatch(loadAllSpaceTemplates());\n }\n }),\n filter(list => !!list)\n );\n }\n\n close(result: DialogResult = DialogResult.Fail) {\n this.dialogRef.close(result);\n }\n\n selectSpaceTemplate(spaceTemplate: RestSpaceTemplateModel) {\n this.router\n .navigate([AppRoutes.SETTINGS_TEMPLATE, this.templateDetails.id, TEMPLATE_VIEWS.AREA, TEMPLATE_VIEWS.NEW_AREA], {\n queryParams: { spaceTemplateId: spaceTemplate.id },\n queryParamsHandling: 'merge',\n })\n .then(() => this.close());\n }\n\n ngOnDestroy(): void {}\n}\n","export enum TurnoverPunchFields {\n DueDate = 'DueDate',\n Priority = 'Priority',\n Title = 'Title',\n Description = 'Description',\n Attachment = 'Attachment',\n Unit = 'Unit',\n}\n","
    \n

    {{ isNewPunch ? 'Create New Punch' : 'Edit Punch' }}

    \n \n
    \n
    \n
    \n
    \n
    Unit
    \n
    {{ turnoverUnitName$ | async }}
    \n
    \n\n
    \n \n \n
    \n \n \n \n
    \n
    \n \n\n \n
    \n
    \n
    \n
    \n \n \n\n \n
    \n {{ isNewPunch ? 'Create and go to PUNCH' : 'Edit' }}\n \n
    \n \n
    \n
    \n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { each } from 'lodash';\nimport { Observable, filter, iif, mergeMap, of, take, tap, withLatestFrom } from 'rxjs';\n\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport { getElapsedDaysThresholds } from '@main-application/management/components/turnover-configuration/actions/turnover-configuration.actions';\nimport { selectThresholdsConfiguration } from '@main-application/management/components/turnover-configuration/selectors/turnover-configuration.selectors';\nimport {\n clearSelectedPunch,\n loadPunchesByTurnoverId,\n sendPunch,\n sendPunchFinished,\n} from '@main-application/turnovers/actions/punch.actions';\nimport {\n deleteFileFromRepository,\n deleteTurnoverTicketAttachment,\n setTicketAttachment,\n setTicketAttachmentSuccess,\n} from '@main-application/turnovers/actions/turnovers.actions';\nimport { selectSelectedPunch } from '@main-application/turnovers/selectors/punch.selectors';\nimport {\n selectTurnoverDataId,\n selectTurnoverUnitName,\n} from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { deleteFile } from '@shared/actions/file-upload.actions';\nimport { PriorityTypeListConst } from '@shared/constants/priority-type-list.const';\nimport { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { TurnoverPunchFields } from '@shared/enums/turnover-punch-fields.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getAttachmentToEntityParams } from '@shared/functions/ticket-attachment.utils';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { TurnoverPunch } from '@shared/interfaces/turnover-punch';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\nimport { TurnoverAttachmentPipe } from '@shared/pipes/turnover-attachment.pipe';\n\nimport { DialogResult } from '../config/dialog-result.enum';\n\n@UntilDestroy()\n@Component({\n selector: 'app-turnover-punch-modal',\n templateUrl: './turnover-punch-modal.component.html',\n styleUrls: ['./turnover-punch-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TurnoverPunchModalComponent implements OnInit {\n TicketAttachmentType = TicketAttachmentType;\n TicketStatusType = TicketStatusType;\n form: UntypedFormGroup;\n isNewPunch = false;\n newAttachment: AttachmentItem;\n allAttachments: RestGenericTypedAttachment[];\n cleanInputAttachment: EventEmitter = new EventEmitter();\n isCompleted: boolean;\n turnoverUnitName$: Observable;\n inProgress = false;\n\n readonly priorityItems: IRadioButtonOption[] = PriorityTypeListConst;\n\n constructor(\n private fb: UntypedFormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: RestTicketModel,\n private dialogRef: MatDialogRef,\n private store: Store<{}>,\n private actions$: Actions,\n private cdr: ChangeDetectorRef,\n private timezoneService: TimezoneService,\n private turnoverAttachment: TurnoverAttachmentPipe\n ) {}\n\n get dueDate(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.DueDate) as UntypedFormControl;\n }\n get priority(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Priority) as UntypedFormControl;\n }\n\n get title(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Title) as UntypedFormControl;\n }\n\n get description(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Description) as UntypedFormControl;\n }\n\n get attachment(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Attachment) as UntypedFormControl;\n }\n\n ngOnInit(): void {\n this.isNewPunch = !this.data.id;\n this.isCompleted = this.data?.ticketStatusType === TicketStatusType.Done;\n this.allAttachments = this.data?.allAttachments;\n\n /* reset modal */\n this.store.dispatch(clearSelectedPunch());\n this.store.dispatch(getElapsedDaysThresholds());\n\n /**\n * after deleting attachment on existing punch\n * it will be reloaded\n */\n this.store\n .select(selectSelectedPunch)\n .pipe(\n untilDestroyed(this),\n filter(Boolean),\n tap(punch => {\n this.data = punch;\n this.allAttachments = this.data?.allAttachments;\n this.cdr.detectChanges();\n })\n )\n .subscribe();\n\n this.turnoverUnitName$ = this.store.select(selectTurnoverUnitName);\n this.store\n .select(selectThresholdsConfiguration)\n .pipe(untilDestroyed(this), filter(Boolean), take(1))\n .subscribe(config => {\n const punchLowThreshold = config.stepThresholds.find(\n e => e.workflowStepEnumType === WorkflowStepEnumType.Punch\n )?.lowThresholdValue;\n const currentDate = this.timezoneService.getCurrentDateOnly();\n const defaultDate = new Date(currentDate.setDate(currentDate.getDate() + punchLowThreshold));\n\n this.form = this.fb.group({\n [TurnoverPunchFields.DueDate]: [this.data?.dueDate ?? defaultDate, Validators.required],\n [TurnoverPunchFields.Priority]: [this.data?.ticketPriorityType ?? PriorityType.Medium, Validators.required],\n // let's hardcode title as \"Punch List\" for now - lyman\n // [TurnoverPunchFields.Title]: [this.data?.name, Validators.maxLength(50)],\n [TurnoverPunchFields.Title]: ['Punch List', Validators.maxLength(50)],\n [TurnoverPunchFields.Description]: [this.data?.detailedInformation, Validators.maxLength(500)],\n [TurnoverPunchFields.Attachment]: [],\n });\n this.cdr.detectChanges();\n });\n }\n\n deletePunchAttachment(attachment: RestGenericTypedAttachment) {\n const ticketType = TicketType.Punch;\n this.store.dispatch(deleteTurnoverTicketAttachment({ ticketType, attachment, ticketId: this.data.id }));\n }\n\n deleteNewPunchAttachment() {\n if (this.newAttachment?.upload) {\n this.store.dispatch(deleteFile({ fileId: this.newAttachment?.upload?.id }));\n }\n this.cleanInputAttachment.emit();\n this.newAttachment = null;\n this.cdr.detectChanges();\n }\n\n private removeAttachmentsIfNeeded() {\n if (this.hasAttachments()) {\n each(this.getAttachments(), item => this.deletePunchAttachment(item));\n }\n }\n\n addAttachment(attachmentItem: AttachmentItem) {\n const isNewTicket = !this.data.id;\n\n if (isNewTicket) {\n if (attachmentItem?.upload?.id !== this.newAttachment?.upload?.id && this.newAttachment?.upload?.id) {\n this.store.dispatch(deleteFileFromRepository({ fileId: this.newAttachment?.upload?.id }));\n }\n this.newAttachment = attachmentItem;\n } else {\n this.removeAttachmentsIfNeeded();\n\n this.store.dispatch(\n setTicketAttachment({\n ticketType: TicketType.Punch,\n attachmentToEntity: getAttachmentToEntityParams(attachmentItem, this.data.id),\n })\n );\n }\n\n this.cdr.detectChanges();\n }\n\n cancel() {\n this.close(DialogResult.Fail);\n }\n\n private close(result: DialogResult) {\n if (this.newAttachment?.upload) {\n this.store.dispatch(deleteFile({ fileId: this.newAttachment?.upload?.id }));\n }\n\n this.dialogRef.close(result);\n }\n\n private getAttachments(): RestGenericTypedAttachment[] {\n return this.turnoverAttachment.transform(this.data.allAttachments, TicketAttachmentType.Attachment);\n }\n\n hasAttachments(): boolean {\n const attachments = this.getAttachments();\n\n return this.isNewPunch ? !!this.newAttachment : !!attachments?.length;\n }\n\n send() {\n if (!this.form.valid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n this.inProgress = true;\n const formValue = this.form.value as TurnoverPunch;\n const punch = {\n ...this.data,\n dueDate: formValue.DueDate,\n ticketPriorityType: formValue.Priority,\n name: formValue.Title || '',\n detailedInformation: formValue.Description || '',\n } as RestTicketModel;\n\n this.store.dispatch(sendPunch({ punch }));\n\n const attachmentAdded$ = this.actions$.pipe(\n ofType(setTicketAttachmentSuccess),\n take(1),\n tap(() => {\n this.newAttachment = null;\n this.cdr.detectChanges();\n })\n );\n\n /* send punch and assign attachment if needed */\n this.actions$\n .pipe(\n ofType(sendPunchFinished),\n take(1),\n mergeMap(action => {\n const isNewTicket = !this.data.id;\n\n const addAttachmentAndWaitForSuccess$ = of(action.punch.id).pipe(\n tap(id => {\n this.store.dispatch(\n setTicketAttachment({\n ticketType: TicketType.Punch,\n attachmentToEntity: getAttachmentToEntityParams(this.newAttachment, action.punch.id),\n })\n );\n }),\n mergeMap(() => attachmentAdded$)\n );\n\n return iif(() => isNewTicket, addAttachmentAndWaitForSuccess$, of(null));\n }),\n withLatestFrom(this.store.select(selectTurnoverDataId)),\n tap(([, turnoverId]) => {\n this.store.dispatch(loadPunchesByTurnoverId({ turnoverId }));\n this.close(DialogResult.Success);\n })\n )\n .subscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { remove } from 'lodash';\nimport { Observable, filter, map, of, take } from 'rxjs';\n\nimport { DefaultModalConfigConstant } from '@app/modules/ui-components/modals/config/default-modal-config.constant';\nimport { AddNewCompanyModalComponent } from '@companies/components/add-new-company-modal/add-new-company-modal.component';\nimport {\n CustomInspectionSaveTemplateDialogComponent,\n CustomInspectionSaveTemplateDialogData,\n CustomInspectionSaveTemplateDialogResult,\n} from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-save-template-dialog/custom-inspection-save-template-dialog.component';\nimport {\n CustomInspectionDialogComponent,\n CustomInspectionDialogData,\n CustomInspectionDialogResult,\n} from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/custom-inspection-template-dialog/custom-inspection-dialog.component';\nimport {\n ScheduleAmountDialogComponent,\n ScheduleAmountDialogData,\n ScheduleAmountDialogResult,\n} from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-amount-dialog/schedule-amount-dialog.component';\nimport {\n ScheduleCellDialogComponent,\n ScheduleCellDialogData,\n ScheduleCellDialogResult,\n} from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-cell-dialog/schedule-cell-dialog.component';\nimport {\n ScheduleCellResult,\n ScheduleDoneDialogComponent,\n ScheduleDoneDialogData,\n} from '@main-application/boards/boards-view/boards-cell/cell-types/schedule-cell/schedule-done-dialog/schedule-done-dialog.component';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { GalleryItem } from '@shared/interfaces/gallery-item';\nimport { ListUpdateAction } from '@shared/interfaces/list-update-action.interface';\nimport { ConfirmationModalData, ModalData } from '@shared/interfaces/modal-data';\nimport { RestTicketModel, RestTurnoverDataModel } from '@shared/interfaces/turnover.interface';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\nimport { selectTenantData } from '@shared/selectors/user.selectors';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { AddBidModalComponent, AddBidModalData } from '@ui-components/modals/add-bid-modal/add-bid-modal.component';\nimport {\n AddVendorUserModalComponent,\n AddVendorUserModalData,\n AddVendorUserModalResult,\n} from '@ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.component';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { GalleryModalComponent } from '@ui-components/modals/gallery-modal/gallery-modal.component';\nimport { InfoModalComponent } from '@ui-components/modals/info-modal/info-modal.component';\nimport {\n NewTurnoverModalComponent,\n NewTurnoverModalData,\n} from '@ui-components/modals/new-turnover-modal/new-turnover-modal.component';\nimport {\n NextStepAssigneeModalComponent,\n NextStepAssigneeModalData,\n} from '@ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.component';\nimport {\n PromptModalComponent,\n PromptModalData,\n PromptModalResult,\n} from '@ui-components/modals/prompt-modal/prompt-modal.component';\nimport { TicketPreviewModalComponent } from '@ui-components/modals/ticket-preview-modal/ticket-preview-modal.component';\nimport {\n UserPreviewModalComponent,\n UserPreviewModalData,\n UserPreviewModalResult,\n} from '@ui-components/modals/user-preview-modal/user-preview-modal.component';\nimport { environment } from 'src/environments/environment';\n\nimport { AddVendorModalComponent, AddVendorModalData } from './add-vendor-modal/add-vendor-modal.component';\nimport { CommentTooLongModalComponent } from './comment-too-long-modal/comment-too-long-modal.component';\nimport { ConfirmationModalComponent } from './confirmation-modal/confirmation-modal.component';\nimport { SpaceTemplateModalComponent } from './space-template-modal/space-template-modal.component';\nimport { TurnoverPunchModalComponent } from './turnover-punch-modal/turnover-punch-modal.component';\n\nconst ModalDialogSizes = {\n xxs: '280px',\n xs: '350px',\n sm: '472px',\n md: '572px',\n lg: '650px',\n};\n\nexport type ModalDialogSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalsService {\n nonPmsUnitCost$ = this.store.select(selectTenantData).pipe(\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.nonPmsUnitCost)\n );\n\n constructor(private dialog: MatDialog, private store: Store<{}>) {}\n\n updateDialogHiddenState(hidden: boolean, data: any) {\n const state = localStorage.getItem('dialogsHiddenByUser');\n try {\n const parsed: any[] = state ? JSON.parse(state) : [];\n if (hidden) {\n parsed.push({\n data,\n });\n } else {\n remove(parsed, d => JSON.stringify(d.data) === JSON.stringify(data));\n }\n localStorage.setItem('dialogsHiddenByUser', JSON.stringify(parsed));\n } catch (e) {}\n }\n\n isDialogHiddenByUser(data: any) {\n const state = localStorage.getItem('dialogsHiddenByUser');\n try {\n const parsed: any[] = JSON.parse(state);\n const dialog = parsed.find(d => JSON.stringify(d.data) === JSON.stringify(data));\n return dialog !== undefined;\n } catch (e) {}\n return false;\n }\n\n openInfoModal(data: ModalData) {\n return this.dialog.open(InfoModalComponent, {\n autoFocus: false,\n panelClass: 'info-modal-container',\n data,\n });\n }\n\n openCommentTooLongModal(maxCounter: number) {\n this.dialog.open(CommentTooLongModalComponent, {\n panelClass: 'comment-too-long-modal-container',\n data: maxCounter,\n });\n }\n\n openGalleryModal(data: GalleryItem) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '1170px',\n maxHeight: '100vh',\n panelClass: 'gallery-modal-container',\n data,\n };\n\n this.dialog.open(GalleryModalComponent, config);\n }\n\n openNewTurnoverModal(activeProperty: number[], isNonPms: boolean) {\n this.dialog.open(NewTurnoverModalComponent, {\n autoFocus: false,\n width: '454px',\n minHeight: '368px',\n panelClass: 'new-turnover-modal-container',\n data: { activePropertyIds: activeProperty, isNonPms: isNonPms },\n });\n }\n\n openNextStepAssigneeModal(\n turnoverData: RestTurnoverDataModel,\n workflowStep: WorkflowStepEnumType,\n propertyId: number,\n propertyName: string\n ) {\n return this.dialog.open(\n NextStepAssigneeModalComponent,\n {\n autoFocus: false,\n width: '412px',\n panelClass: 'next-step-assignee-modal-container',\n disableClose: true,\n data: {\n nextWorkflowStep: workflowStep,\n turnoverData,\n propertyId,\n propertyName,\n },\n }\n );\n }\n\n openTicketPreviewModal(data: ListUpdateAction) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '683px',\n maxHeight: '100vh',\n panelClass: 'ticket-preview-modal-container',\n data,\n };\n\n return this.dialog.open(TicketPreviewModalComponent, config);\n }\n\n openPunchModal(data: RestTicketModel) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '1171px',\n maxHeight: '100vh',\n panelClass: 'punch-modal-container',\n disableClose: true,\n data,\n };\n\n return this.dialog.open(TurnoverPunchModalComponent, config);\n }\n\n openNewVendor() {\n return this.dialog.open(AddNewCompanyModalComponent, { ...DefaultModalConfigConstant, width: '400px' });\n }\n\n openPrompt(data: PromptModalData, size: ModalDialogSize = 'sm') {\n return this.dialog.open(PromptModalComponent, {\n ...DefaultModalConfigConstant,\n width: typeof size === 'number' ? `${size}px` : ModalDialogSizes[size],\n data,\n });\n }\n\n openNewVendorModal(data: AddVendorModalData) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '572px',\n maxHeight: '100vh',\n panelClass: 'add-vendor-modal-container',\n disableClose: true,\n data,\n };\n\n return this.dialog.open(\n AddVendorModalComponent,\n config\n );\n }\n\n openScheduleModal(data: ScheduleCellDialogData) {\n return this.dialog.open(\n ScheduleCellDialogComponent,\n {\n data,\n panelClass: 'schedule-modal-container',\n }\n );\n }\n\n openScheduleDoneModal(data: ScheduleDoneDialogData) {\n return this.dialog.open(\n ScheduleDoneDialogComponent,\n {\n data,\n }\n );\n }\n\n openCustomInspectionModal(data: CustomInspectionDialogData) {\n return this.dialog.open(\n CustomInspectionDialogComponent,\n {\n data,\n panelClass: 'custom-inspection-modal-container',\n disableClose: true,\n autoFocus: 'dialog',\n }\n );\n }\n\n openEditAmountModal(data: ScheduleAmountDialogData) {\n return this.dialog.open(\n ScheduleAmountDialogComponent,\n {\n data,\n panelClass: 'schedule-modal-container',\n }\n );\n }\n\n openCustomInspectionSaveTemplateModal(data: CustomInspectionSaveTemplateDialogData) {\n return this.dialog.open<\n CustomInspectionSaveTemplateDialogComponent,\n CustomInspectionSaveTemplateDialogData,\n CustomInspectionSaveTemplateDialogResult\n >(CustomInspectionSaveTemplateDialogComponent, {\n data,\n panelClass: 'schedule-modal-container',\n autoFocus: 'dialog',\n disableClose: true,\n });\n }\n\n getAcceptChargesText() {\n return this.nonPmsUnitCost$.pipe(\n map(cost => {\n const version = environment.ver.split('.').map(e => +e);\n const isBeta = environment.apiUrl.includes('beta');\n if (isBeta && (version[0] < 5 || (version[0] == 5 && version[1] < 6))) {\n return `There will be a monthly fee of $${cost} (waived until 01/01/24) for this unit for each month it is active.`;\n }\n return `There will be a monthly fee of $${cost} for this unit for each month it is active.`;\n })\n );\n }\n\n openConfirmationModal(\n data: ConfirmationModalData,\n size: ModalDialogSize = 'sm'\n ): MatDialogRef {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: typeof size === 'number' ? `${size}px` : ModalDialogSizes[size],\n maxHeight: '80vh',\n panelClass: 'confirmation-modal-container',\n disableClose: true,\n data,\n };\n\n if (data.doNotShowAgain && this.isDialogHiddenByUser(data)) {\n return {\n afterClosed(): Observable {\n return of(DialogResult.Success);\n },\n } as MatDialogRef;\n } else {\n return this.dialog.open(ConfirmationModalComponent, config);\n }\n }\n\n openUserPreviewModal(user?: UserWithGeneralRole, vendorId?: number, header?: string) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '572px',\n panelClass: 'user-preview-modal-container',\n data: { user, vendorId, header },\n };\n\n return this.dialog.open(\n UserPreviewModalComponent,\n config\n );\n }\n\n openVendorUserModal(vendorId?: number, header?: string) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '572px',\n panelClass: 'add-vendor-user-modal-container',\n data: { vendorId, header },\n };\n\n return this.dialog.open(\n AddVendorUserModalComponent,\n config\n );\n }\n\n openSpaceTemplateModal(templateDetails: RestTemplateModel) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '572px',\n panelClass: 'user-preview-modal-container',\n data: templateDetails,\n };\n\n return this.dialog.open(SpaceTemplateModalComponent, config);\n }\n\n addBid(turnoverId: number) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '450px',\n panelClass: 'add-bid-modal-container',\n data: {\n turnoverId,\n },\n };\n\n return this.dialog.open(AddBidModalComponent, config);\n }\n}\n","
    \n
    \n
    \n {{ form.value.isNonPms ? 'Create non-PMS unit and turn' : 'New ' + (systemConfigPmsName$ | async) }}\n
    \n
    \n\n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n\n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n \n Cancel\n \n \n
    \n {{ form.value.isNonPms ? 'Create unit & turn' : 'Create turn' }}\n \n
    \n \n
    \n
    \n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { isNil } from 'lodash';\nimport { Observable, of } from 'rxjs';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { UnitNonPmsService } from '@app/services/unit-non-pms.service';\nimport { loadUnitDetails, loadUnitList, resetUnitList } from '@main-application/dashboards/actions/dashboard.actions';\nimport {\n selectSelectedPortfolioId,\n selectSelectedPropertyId,\n selectUnitDetails,\n selectUnitList,\n selectUnitListLoading,\n} from '@main-application/dashboards/selectors/dashboards.selectors';\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport { createNewTurnover, resetCreateNewTurnover } from '@main-application/turnovers/actions/turnovers.actions';\nimport { TurnoverForm } from '@main-application/turnovers/config/enums/turnover-form';\nimport {\n selectCreateTurnoverLoading,\n selectCreatedTurnover,\n} from '@main-application/turnovers/selectors/turnovers.selectors';\nimport { selectProperties, selectPropertiesLoading } from '@portfolio/selectors/portfolio.selectors';\nimport { loadAllUserProperties } from '@shared/actions/user.actions';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { WorkflowStepListActive } from '@shared/constants/workflow-step-list.const';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getPortfolioProperties } from '@shared/functions/get-portfolio-properties.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { PostTurnoverModel } from '@shared/interfaces/turnover.interface';\nimport { selectTenantData } from '@shared/selectors/user.selectors';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { DialogResult } from '../config/dialog-result.enum';\nimport { ModalsService } from '../modals.service';\n\nexport class NewTurnoverModalData {\n activePropertyIds: number[];\n isNonPms: boolean;\n defaultWorkflowStepType?: WorkflowStepEnumType;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-new-turnover-modal',\n templateUrl: './new-turnover-modal.component.html',\n styleUrls: ['./new-turnover-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NewTurnoverModalComponent extends ComponentAbstract implements OnInit, OnDestroy {\n form = this.formBuilder.group({\n [TurnoverForm.PROPERTY_ID]: [null as number, [Validators.required]],\n [TurnoverForm.UNIT_ID]: [null as number, [Validators.required]],\n unitName: ['non-PMS unit', [Validators.required]],\n [TurnoverForm.MOVE_OUT]: [this.timezoneService.getCurrentDateOnly(), [Validators.required]],\n startWorkflowStepType: [WorkflowStepEnumType.MoveOut, [Validators.required, this.noticeValidation()]],\n isNonPms: false,\n });\n\n portfolioItems: RestPortfolioModel[] = [];\n userPropertiesList: IRadioButtonOption[] = [];\n userProperties: IRadioButtonOption[] | IRadioButtonOption[][] = [];\n userUnits: IRadioButtonOption[] = [];\n\n selectPropertiesLoading$: Observable;\n unitListLoading$: Observable;\n newTurnoverLoadingInProgress$: Observable;\n systemConfigPmsName$ = this.store.select(selectTenantData).pipe(\n untilDestroyed(this),\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.pmses.split(',')[0])\n );\n nonPmsUnitCost$ = this.store.select(selectTenantData).pipe(\n untilDestroyed(this),\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.nonPmsUnitCost)\n );\n workflowStepTypes = WorkflowStepListActive;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: NewTurnoverModalData,\n private formBuilder: FormBuilder,\n private store: Store<{}>,\n private router: Router,\n private unitNonPmsService: UnitNonPmsService,\n private timezoneService: TimezoneService,\n private modalService: ModalsService,\n private datePipe: DatePipe,\n private snackbarService: SnackbarService\n ) {\n super(cdr);\n\n if (data.defaultWorkflowStepType) {\n this.form.controls.startWorkflowStepType.setValue(data.defaultWorkflowStepType);\n }\n }\n\n noticeValidation(): ValidatorFn {\n const today = this.timezoneService.getCurrentDateOnly();\n const tomorrow = new Date(today.setDate(today.getDate() + 1));\n return (control: FormControl): ValidationErrors | null => {\n if (!this.form?.value || control.value == WorkflowStepEnumType.Notice || today >= this.form.value.MoveOutDate) {\n return null;\n }\n\n return {\n customError: `NOTICE required if MOD < ${this.datePipe.transform(tomorrow, 'MM/dd')}`,\n };\n };\n }\n\n ngOnInit(): void {\n this.store.dispatch(loadAllUserProperties());\n this.store.dispatch(resetCreateNewTurnover());\n\n this.selectPropertiesLoading$ = this.store.select(selectPropertiesLoading);\n this.unitListLoading$ = this.store.select(selectUnitListLoading);\n this.newTurnoverLoadingInProgress$ = this.store.select(selectCreateTurnoverLoading);\n\n this.form.controls.MoveOutDate.valueChanges.subscribe(() =>\n this.form.controls.startWorkflowStepType.updateValueAndValidity()\n );\n\n this.form.controls.isNonPms.valueChanges.subscribe(value => {\n if (value) {\n this.form.controls.unitName.enable();\n this.form.controls.UnitId.disable();\n this.modalService\n .getAcceptChargesText()\n .pipe(\n switchMap(acceptChargesText =>\n this.modalService\n .openConfirmationModal({\n cancelLabel: 'No, go back',\n confirmColor: 'warn',\n confirmLabel: 'I accept',\n title: 'Accept charges?',\n content: acceptChargesText,\n })\n .afterClosed()\n ),\n take(1),\n untilDestroyed(this),\n filter(result => result !== DialogResult.Success)\n )\n .subscribe(() => this.form.controls.isNonPms.setValue(false));\n } else {\n this.form.controls.UnitId.addValidators(Validators.required);\n this.form.controls.unitName.disable();\n this.form.controls.UnitId.enable();\n }\n });\n\n this.form.controls.isNonPms.setValue(this.data.isNonPms);\n\n this.store\n .select(selectSelectedPropertyId)\n .pipe(untilDestroyed(this), take(1), filter(Boolean))\n .subscribe(propertyId => {\n this.form.controls.PropertyId.setValue(propertyId);\n this.cdr.detectChanges();\n });\n\n this.store\n .select(selectSelectedPortfolioId)\n .pipe(\n untilDestroyed(this),\n filter(portfolioId => !!portfolioId),\n take(1)\n )\n .subscribe(portfolioId => {\n this.store.dispatch(\n loadUnitDetails({ propertyId: portfolioId, dashboardViewType: DashboardViewType.PORTFOLIO_WIDE_VIEW })\n );\n });\n\n this.store.select(selectUnitDetails).subscribe(unitList => {\n const nonPmsUnitMaxNumber = unitList\n .flatMap(e => e.unitName)\n .filter(unitName => /^non-PMS unit[0-9]*$/.test(unitName))\n .map(unitName => +unitName.replace('non-PMS unit', ''))\n .reduce((max, nextValue) => (nextValue >= max ? nextValue + 1 : max), 0);\n\n const unitName = 'non-PMS unit' + (nonPmsUnitMaxNumber == 0 ? '' : nonPmsUnitMaxNumber);\n\n this.form.controls.unitName.setValue(unitName);\n });\n\n this.store\n .select(selectProperties)\n .pipe(\n untilDestroyed(this),\n filter((userProperties: RestPropertyModel[]) => !!userProperties)\n )\n .subscribe((userProperties: RestPropertyModel[]) => {\n this.userPropertiesList = getPortfolioProperties(userProperties);\n\n if (this.data?.activePropertyIds?.length) {\n const activeProperties: IRadioButtonOption[] = [];\n const otherProperties: IRadioButtonOption[] = [];\n\n this.userPropertiesList.forEach((item: IRadioButtonOption) => {\n if (this.data.activePropertyIds?.includes(item.value)) {\n activeProperties.push(item);\n } else {\n otherProperties.push(item);\n }\n });\n\n this.userProperties = [activeProperties, otherProperties];\n } else {\n this.userProperties = [...this.userPropertiesList];\n }\n\n this.cdr.detectChanges();\n });\n\n this.store\n .select(selectUnitList)\n .pipe(\n untilDestroyed(this),\n filter(() => !!this.form.value.PropertyId)\n )\n .subscribe((unitList: RestUnitSummaryModel[]) => {\n this.userUnits = this.getUnitList(unitList);\n this.cdr.markForCheck();\n });\n\n this.store\n .select(selectCreatedTurnover)\n .pipe(\n untilDestroyed(this),\n filter(createdTurnover => !!createdTurnover)\n )\n .subscribe(createdTurnover => {\n let successMessage: string;\n if (this.form.value.isNonPms) {\n const unitName = this.form.value.unitName;\n successMessage = `Turn created for ${unitName}`;\n } else {\n const unitName = this.userUnits.find(e => e.value === this.form?.value?.UnitId)?.label;\n const propertyName = this.userPropertiesList.find(e => e.value === this.form.value.PropertyId)?.label;\n successMessage = `Turn created for ${propertyName} - ${unitName}`;\n }\n this.store.dispatch(resetUnitList());\n\n this.dialogRef.close();\n this.reloadRoute().then(() =>\n this.router\n .navigate([AppRoutes.TURNOVERS, `${createdTurnover.id}`], {\n queryParamsHandling: 'merge',\n })\n .then(() => this.snackbarService.success(successMessage))\n );\n });\n\n this.form.controls.PropertyId.valueChanges.pipe(untilDestroyed(this)).subscribe(propertyId => {\n if (!isNil(propertyId)) {\n this.store.dispatch(loadUnitList({ propertyId }));\n }\n this.form.controls.UnitId.reset();\n });\n\n if (!this.data.defaultWorkflowStepType) {\n this.form.controls.MoveOutDate.valueChanges.pipe(untilDestroyed(this)).subscribe(moveOutDate => {\n if (moveOutDate > this.timezoneService.getCurrentDateOnly()) {\n this.form.controls.startWorkflowStepType.setValue(WorkflowStepEnumType.Notice);\n } else {\n this.form.controls.startWorkflowStepType.setValue(WorkflowStepEnumType.MoveOut);\n }\n });\n }\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n newTurnover() {\n if (this.form.invalid) {\n this.showValidationError = true;\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const unitId$ = this.form.value.isNonPms\n ? this.unitNonPmsService.add({\n propertyId: this.form.value.PropertyId,\n name: this.form.value.unitName,\n })\n : of(this.form.value.UnitId);\n\n unitId$.subscribe(unitId => {\n const postTurnoverModel: PostTurnoverModel = {\n unitId: unitId,\n propertyId: this.form.value.PropertyId,\n dateMoveOut: this.form.value.MoveOutDate,\n startWorkflowStepType: this.form.value.startWorkflowStepType,\n };\n\n this.store.dispatch(createNewTurnover({ postTurnoverModel }));\n });\n }\n\n ngOnDestroy(): void {}\n\n private getUnitList(unitList: RestUnitSummaryModel[] = []): IRadioButtonOption[] {\n if (!unitList?.length) {\n return [];\n }\n return unitList.map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n });\n }\n\n private reloadRoute(): Promise {\n return this.router.navigateByUrl('/', { skipLocationChange: true });\n }\n}\n","export const EMAIL_REGEXP =\n /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nimport { EMAIL_REGEXP } from '@shared/constants/email.regexp.const';\n\nexport const EmailPatternValidator = (): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n return EMAIL_REGEXP.test(control?.value) ? null : { email: true };\n };\n};\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { BillingReportFilter, BillingReportItem } from '@shared/interfaces/billing.interface';\nimport { UserToGeneralRoleModel } from '@shared/interfaces/user-to-general-role-model';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdminPanelService {\n constructor(private restApiService: RestapiService) {}\n\n setUserToGeneralRole(usersToGeneralRoleList: UserToGeneralRoleModel[]): Observable {\n return this.restApiService.create(`AdminPanel/UserToGeneralRole`, usersToGeneralRoleList);\n }\n\n setUserToPropertyRole(userToPropertyRoleList: UserToPropertyMapping[]): Observable {\n if (!userToPropertyRoleList?.length) {\n return of(false);\n }\n\n return this.restApiService.create(`AdminPanel/UserToPropertyRole`, userToPropertyRoleList);\n }\n\n removeUserFromPropertyRole(propertyId: number[]): Observable {\n if (!propertyId?.length) {\n return of(false);\n }\n\n return this.restApiService.create(`AdminPanel/UserToPropertyRole/remove`, propertyId);\n }\n\n billingReport(filter: BillingReportFilter): Observable {\n return this.restApiService.getData(\n `AdminPanel/BillingReport?startDate=${filter.startDate.toISOString()}&endDate=${filter.endDate.toISOString()}`\n );\n }\n\n runImporterNow(): Observable {\n return this.restApiService.getData(`AdminPanel/runImporterNow`);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { AppVersion } from '@shared/interfaces/app-version';\n\nexport const APP_VERSION = 'APP_VERSION';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppVersionService {\n constructor(private http: HttpClient) {}\n\n private readonly version = new BehaviorSubject({ version_timestamp: 0, version_number: '' });\n readonly version$ = this.version.asObservable();\n\n pull() {\n this.emitVersion();\n setInterval(() => {\n this.emitVersion();\n }, 3 * 60 * 1000);\n }\n\n getCurrentVersion(): string {\n const version = sessionStorage.getItem(APP_VERSION);\n if (version !== null) {\n try {\n const appVersion = JSON.parse(version) as AppVersion;\n return `${appVersion.version_number} (${appVersion.version_timestamp})`;\n } catch (e) {}\n }\n return '';\n }\n\n private emitVersion() {\n this.getVersion().subscribe(data => {\n this.version.next(data);\n this.saveCurrentVersion(data);\n });\n }\n\n private getVersion(): Observable {\n return this.http.get(`/version/app-version.json?dt=${Date.now()}`);\n }\n\n private saveCurrentVersion(data: AppVersion) {\n sessionStorage.setItem(APP_VERSION, JSON.stringify(data));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, filter } from 'rxjs';\n\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\n\nclass CacheInfo {\n cachedSubject: ReplaySubject;\n expired: boolean;\n id: number;\n timestamp: Date;\n version?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CacheService {\n private cacheInfoDictionary: { [key: string]: CacheInfo } = {};\n\n getCachedInfo(key: string, id: number, f: (id: number) => Observable, version?: number): Observable {\n if (!this.cacheInfoDictionary[key]) {\n this.cacheInfoDictionary[key] = {\n cachedSubject: new ReplaySubject(1),\n expired: true,\n id: id,\n timestamp: new Date(),\n version: undefined,\n };\n }\n\n const cacheInfo = this.cacheInfoDictionary[key];\n\n if (\n cacheInfo.expired ||\n cacheInfo.id !== id ||\n cacheInfo.version !== version ||\n this.expiredFromLocalStarage(key, cacheInfo.timestamp)\n ) {\n if (cacheInfo.id !== id) {\n cacheInfo.cachedSubject.complete();\n cacheInfo.cachedSubject = new ReplaySubject(1);\n } else {\n cacheInfo.cachedSubject.next(undefined);\n }\n\n cacheInfo.expired = false;\n cacheInfo.timestamp = new Date();\n cacheInfo.version = version;\n cacheInfo.id = id;\n f(id).subscribe(data => cacheInfo.cachedSubject.next(data));\n }\n return cacheInfo.cachedSubject.pipe(filter(data => typeof data !== 'undefined'));\n }\n\n private expiredFromLocalStarage(key: string, timestamp: Date) {\n const storageTimestamp = localStorage.getItem(LocalStorageDataEnum.CACHE_KEYS.replace('{0}', key));\n return storageTimestamp && new Date(storageTimestamp) > timestamp;\n }\n\n expireCachedInfo(key: string): void {\n const cacheInfo = this.cacheInfoDictionary[key];\n if (cacheInfo) {\n cacheInfo.expired = true;\n localStorage.setItem(LocalStorageDataEnum.CACHE_KEYS.replace('{0}', key), new Date().toString());\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\nimport { PostCompanyAddressModel, RestCompanyModel, UpdateEmployeeItem } from '@shared/interfaces/companies.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CompaniesService {\n constructor(private restApiService: RestapiService) {}\n\n getCompanyList(): Observable {\n return this.restApiService.getData(`Companies`);\n }\n\n getCompany(companyId: number): Observable {\n return this.restApiService.getData(`Companies/${companyId}`);\n }\n\n addNewCompany(companyModel: RestCompanyModel): Observable {\n return this.restApiService.create('Companies', companyModel);\n }\n\n updateCompany(companyModel: RestCompanyModel): Observable {\n return this.restApiService.update(`Companies/${companyModel.id}`, companyModel);\n }\n\n deleteCompany(companyId: number): Observable {\n return this.restApiService.delete(`Companies/${companyId}`);\n }\n\n addEmployeeToCompany(updateEmployeeItem: UpdateEmployeeItem): Observable {\n return this.restApiService.associate(\n `Companies/${updateEmployeeItem.companyId}/assignEmployees`,\n updateEmployeeItem.userIds\n );\n }\n\n deleteEmployeeFromCompany(updateEmployeeItem: UpdateEmployeeItem): Observable {\n return this.restApiService.associate(\n `Companies/${updateEmployeeItem.companyId}/removeEmployees`,\n updateEmployeeItem.userIds\n );\n }\n\n addAddressToCompany(postCompanyAddressModel: PostCompanyAddressModel): Observable {\n return this.restApiService.create(\n `Companies/${postCompanyAddressModel.companyId}/Addresses`,\n postCompanyAddressModel\n );\n }\n\n updateAddressInCompany(restAddressModel: RestAddressModel, companyId: number): Observable {\n return this.restApiService.update(`Companies/${companyId}/Addresses/${restAddressModel.id}`, restAddressModel);\n }\n}\n","import { HttpEvent } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { FileSearchQuery, FileUploadModel, Upload } from '@shared/interfaces';\n\nimport { environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FileUploadsService {\n constructor(private restApiService: RestapiService) {}\n\n uploadFile(file: File): Observable {\n return this.restApiService.upload(`FileUploads/`, file);\n }\n\n uploadFileProgress(file: File): Observable> {\n return this.restApiService.uploadProgress(`FileUploads/`, file);\n }\n\n removeFile(fileId: number): Observable {\n return this.restApiService.delete(`FileUploads/${fileId}`);\n }\n\n search(query: FileSearchQuery) {\n return this.restApiService.post(`FileUploads/search`, query);\n }\n\n download(fileUploadId: number) {\n this.search({ ids: [fileUploadId] }).subscribe(result => {\n if (result?.length) {\n window.open(result[0].cloudUri, '_parent');\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { sumBy } from 'lodash';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { KpiWindowType } from '@shared/enums/kpi-window-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KpiService {\n constructor(private restApiService: RestapiService) {}\n\n private filterKpiByType(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType): RestPortfolioKpi[] {\n return kpis.filter(k => k.kpiType === kpiType);\n }\n\n avg(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType, precision = 0): number | undefined {\n const filtered = this.filterKpiByType(kpis, kpiType);\n const avg = sumBy(filtered, k => k.value * k.unitsCount) / sumBy(filtered, k => k.unitsCount);\n if (isNaN(avg)) {\n return undefined;\n } else {\n return !precision ? Math.round(avg) : parseFloat(avg.toFixed(precision));\n }\n }\n\n sum(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType, precision = 0): number {\n const filtered = this.filterKpiByType(kpis, kpiType);\n return parseFloat(sumBy(filtered, k => k.value).toFixed(precision));\n }\n\n percent(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType): number | undefined {\n const filtered = this.filterKpiByType(kpis, kpiType);\n const value = sumBy(filtered, k => k.value) / sumBy(filtered, k => k.unitsCount);\n if (isNaN(value)) {\n return undefined;\n }\n return Math.round(value * 100);\n }\n\n fetch(portfolioId: number, dateOffset: KpiWindowType, kpiTypes: PortfolioKpiType[]) {\n return this.restApiService.getData(\n `portfolio/${portfolioId}/kpis?dateOffset=${dateOffset}&${kpiTypes.map(k => `kpiIds=${k}`).join('&')}`\n );\n }\n\n trend(portfolioId: number, kpiTypes: PortfolioKpiType[], trendDays: number[]) {\n return this.restApiService.getData(\n `portfolio/${portfolioId}/kpisTrend?kpi=[${kpiTypes.map(k => k).join(',')}]&trend_line=[${trendDays.join(',')}]`\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport {\n RestPropertyManagerAccessModel,\n RestPropertyModel,\n RestPropertyTurnsWithoutAssignees,\n UpdatePropertyManagerModel,\n} from '@shared/interfaces/rest-portfolio-model.interface';\nimport { PreleaseFilterMode } from '@shared/interfaces/turnover.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PropertiesService {\n constructor(private restApiService: RestapiService) {}\n\n getAllUserProperties(): Observable {\n return this.restApiService.getData(`properties`);\n }\n\n getAllUserUnassignedProperties(): Observable {\n return this.restApiService.getData(`properties/unassigned`);\n }\n\n getPropertyManagers(): Observable {\n return this.restApiService.getData(`Properties/PropertyManagers`);\n }\n\n getPropertyManagersForProperty(propertyId: number): Observable {\n return this.restApiService.getData(`Properties/${propertyId}/PropertyManagers`);\n }\n\n removePropertyManagers(propertyManagerModels: UpdatePropertyManagerModel[]): Observable {\n return this.restApiService.update(`Properties/RemovePropertyManagers`, propertyManagerModels);\n }\n\n setPropertyManagers(propertyManagerModels: UpdatePropertyManagerModel[]): Observable {\n return this.restApiService.update(`Properties/SetPropertyManagers`, propertyManagerModels);\n }\n\n setPropertyPreleaseFilter(propertyId: number, preleaseFilterMode: PreleaseFilterMode): Observable {\n return this.restApiService.create(`Properties/${propertyId}/SetPreleaseMode`, preleaseFilterMode);\n }\n\n getTurnsWithoutAssignees(\n propertyId: number,\n step: WorkflowStepEnumType\n ): Observable {\n return this.restApiService.getData(\n `Properties/turnsWithoutAssignee/${propertyId}/${step}`\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestRenewalModel, RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RenewalsService {\n constructor(private restApiService: RestapiService) {}\n\n getRenewalDetails(renewalId: number): Observable {\n return this.restApiService.getData(`Renewals/${renewalId}`);\n }\n\n updateRenewalDetails(renewalModel: RestRenewalModel): Observable {\n return this.restApiService.update(`Renewals/${renewalModel.id}`, renewalModel);\n }\n\n getRenewalList(propertyId: number): Observable {\n return this.restApiService.getData(`Renewals/property/${propertyId}`);\n }\n\n renewalTargetList(propertyId: number): Observable {\n return this.restApiService.getData(`Renewals/RenewalTargets/property/${propertyId}`);\n }\n\n renewalTargetForUnitId(unitId: number): Observable {\n return this.restApiService.getData(`Renewals/RenewalTargetForUnitId/${unitId}`);\n }\n\n updateRenewalTarget(renewalTargetModels: RestUnitRenewalTargetModel[]): Observable {\n return this.restApiService.update(`Renewals/RenewalTargets`, renewalTargetModels);\n }\n}\n","import { HttpClient, HttpEvent, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, map, mergeMap } from 'rxjs';\n\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { TimezoneService } from '@main-application/management/components/system-configuration/components/date-time-configuration/timezone.service';\nimport { TimezoneEntityHelper } from '@main-application/management/components/system-configuration/components/timezone-entity.helper';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RestapiServiceWithoutTimezone {\n constructor(protected http: HttpClient, protected appVersionService: AppVersionService) {}\n\n /**\n * @title Repository Service\n *\n * TODO: Add pagination support. https://medium.com/@JeremyLaine/server-side-pagination-and-filtering-with-angular-6-280a7909e783\n */\n\n public getData(route: string): Observable {\n return this.http.get(this.composeRoute(route, environment.apiUrl), this.generateHeaders());\n }\n\n public customPatchData(route: string, body: unknown): Observable {\n return this.http.patch(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public post(route: string, body?: unknown): Observable {\n return this.http.post(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public create(route: string, body: unknown): Observable {\n return this.http.post(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public associate(route: string, body: unknown): Observable {\n return this.http.post(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public update(route: string, body: unknown): Observable {\n return this.http.put(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public delete(route: string): Observable {\n return this.http.delete(this.composeRoute(route, environment.apiUrl), this.generateHeaders());\n }\n\n public upload(route: string, file: File, options: { reportProgress?: boolean } = {}): Observable {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(this.composeRoute(route, environment.apiUrl), formData);\n }\n\n public uploadProgress(route: string, file: File): Observable> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(this.composeRoute(route, environment.apiUrl), formData, {\n reportProgress: true,\n responseType: 'json',\n observe: 'events',\n });\n }\n\n public download(route: string): Observable {\n return this.http.get(this.composeRoute(route, environment.apiUrl), {\n responseType: 'blob',\n });\n }\n\n public getUrl(route: string): string {\n return this.composeRoute(route, environment.apiUrl);\n }\n\n private composeRoute(route: string, environmentUrl: string): string {\n return `${environmentUrl}/${route}`;\n }\n\n private generateHeaders() {\n return {\n headers: new HttpHeaders({ 'X-PU-VERSION': this.appVersionService.getCurrentVersion() }),\n };\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RestapiService extends RestapiServiceWithoutTimezone {\n constructor(http: HttpClient, private timezoneService: TimezoneService, appVersionService: AppVersionService) {\n super(http, appVersionService);\n }\n\n public getData(route: string, customTimezoneFixer: (data: T, timezone: number) => T = null): Observable {\n return super\n .getData(route)\n .pipe(\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixer ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public customPatchData(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: number) => TBody = null,\n customTimezoneFixerResponce: (data: T, timezone: number) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.customPatchData(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponce ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public post(\n route: string,\n body?: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: number) => TBody = null,\n customTimezoneFixerResponse: (data: T, timezone: number) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.post(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponse ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public create(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: number) => TBody = null,\n customTimezoneFixerResponce: (data: T, timezone: number) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.create(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponce ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public update(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: number) => TBody = null,\n customTimezoneFixerResponce: (data: T, timezone: number) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.update(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponce ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidePanelService {\n isSidePanelExpanded$: Observable;\n private isSidePanelExpanded = true;\n private isSidePanelExpandedSubject = new BehaviorSubject(this.isSidePanelExpanded);\n\n constructor() {\n this.isSidePanelExpanded$ = this.isSidePanelExpandedSubject.asObservable();\n }\n\n toggleSidePanel() {\n this.isSidePanelExpanded = !this.isSidePanelExpanded;\n this.isSidePanelExpandedSubject.next(this.isSidePanelExpanded);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestSurveyTemplate } from '@main-application/survey-creator/interfaces/survey-template';\nimport { RestTemplateAreaModel } from '@template/models/rest-template-model.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SurveysService {\n constructor(private restApiService: RestapiService) {}\n\n getSurveyTemplates(): Observable {\n return this.restApiService.getData('AdminPanel/templatesList');\n }\n\n saveTemplate(id: number, template: string): Observable {\n return this.restApiService.update('AdminPanel/template', { id, template });\n }\n\n add(survey: RestTemplateAreaModel): Observable {\n return this.restApiService.post(`inspections/template/survey/add`, survey);\n }\n\n update(survey: RestTemplateAreaModel): Observable {\n return this.restApiService.post(`inspections/template/survey/${survey.id}`, survey);\n }\n\n delete(id: number): Observable {\n return this.restApiService.post('inspections/template/survey/delete', id);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PmsCredentialModel } from '@shared/interfaces/pms-credential-model.interface';\nimport { RestChatHooksChannel } from '@shared/interfaces/rest-chat-hooks-channel';\nimport { RestTimerReport } from '@shared/interfaces/rest-timer-report';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SystemConfigService {\n constructor(private restApiService: RestapiService) {}\n\n getSystemConfig(): Observable {\n return this.restApiService.getData('AdminPanel/ApiCredentials');\n }\n\n getChatHooksChannels(): Observable {\n return this.restApiService.getData('slack/channels');\n }\n\n getTimerReport(): Observable {\n return this.restApiService.getData('Turnovers/mismatchissues');\n }\n\n setPropertyChatChannel(propertyId: number, channelIds: string[]): Observable<{}> {\n return this.restApiService.update<{}>(`properties/${propertyId}/UpdateSlackChannelId`, {\n channelIds,\n });\n }\n\n addSystemConfig(pmsCredential: PmsCredentialModel): Observable {\n return this.restApiService.create('AdminPanel/ApiCredentials', pmsCredential);\n }\n\n deleteSystemConfig(id: number): Observable {\n return this.restApiService.delete('AdminPanel/ApiCredentials/' + id);\n }\n\n updateSystemConfig(pmsCredential: PmsCredentialModel): Observable {\n return this.restApiService.associate('AdminPanel/ApiCredentials', pmsCredential);\n }\n\n buildiumTokenExchange(jwtToken: string): Observable {\n return this.restApiService.associate('AdminPanel/buildiumTokenExchange', { jwtToken });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport {\n RestTicketModel,\n RestTypedTicketAttachment,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TicketsService {\n constructor(private restApiService: RestapiService) {}\n\n create(turnoverTicket: RestTicketModel): Observable {\n return this.restApiService.create(`Tickets`, turnoverTicket);\n }\n\n update(turnoverTicket: RestTicketModel): Observable {\n return this.restApiService.update(`Tickets/${turnoverTicket.id}`, turnoverTicket);\n }\n\n delete(ticketId: number): Observable {\n return this.restApiService.delete(`Tickets/${ticketId}`);\n }\n\n getTicket(ticketId: number): Observable {\n return this.restApiService.getData(`Tickets/${ticketId}`);\n }\n\n getTicketAttachment(ticketId: number): Observable {\n return this.restApiService.getData(`Tickets/${ticketId}/Attachments`);\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Tickets/${attachmentToEntity.ticketId}/Attachments`,\n attachmentToEntity\n );\n }\n\n getTicketsByTurnover(turnoverId: number): Observable {\n return this.restApiService.getData(`Tickets/ByTurnoverId/${turnoverId}`);\n }\n\n getTicketsByAssigneeId(assigneeId: number): Observable {\n return this.restApiService.getData(`Tickets/ByAssigneeId/${assigneeId}`);\n }\n\n getTicketsByPropertyId(propertyId: number): Observable {\n return this.restApiService.getData(`Tickets/ByPropertyId/${propertyId}`);\n }\n\n deleteTurnoverAttachment(ticketId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Tickets/${ticketId}/Attachments/${attachmentId}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TenantSettingsModel } from '@main-application/management/components/turnover-configuration/components/turnover-configuration-elapsed-days-section/models/config.models';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\nimport { TurnoverConfigSection } from '@shared/interfaces/turnover-config.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnoverConfigService {\n constructor(private restApiService: RestapiService) {}\n\n getTurnoverConfigList(): Observable {\n return this.restApiService.getData('AdminPanel/turnoverConfiguration');\n }\n\n getTurnoverConfigListByWorkflowType(id: WorkflowStepEnumType): Observable {\n return this.restApiService.getData(`AdminPanel/turnoverConfiguration/${id}`);\n }\n\n updateTurnoverFieldConfiguration(turnoverConfig: TurnoverConfigSection): Observable {\n return this.restApiService.update(`AdminPanel/turnoverConfiguration`, turnoverConfig);\n }\n\n getElapsedDaysThresholds(): Observable {\n return this.restApiService.getData('AdminPanel/ElapsedDaysThresholds');\n }\n\n getTenantSettings(): Observable {\n return this.restApiService.getData('adminPanel/tenantSettings');\n }\n\n saveTenantSettings(\n tenantSettings: Partial<\n Pick<\n TenantSettingsModel,\n | 'disableAllEscalationNotices'\n | 'pmsImportNonRevenueUnits'\n | 'escalationEmailsEnabledForProperties'\n | 'autoMoveToMakeReady'\n | 'doNotEmailWhenAssigneeChanges'\n | 'writeMakeReadyStatus'\n | 'writeAvailableDate'\n >\n >\n ): Observable {\n return this.restApiService.post('adminPanel/tenantSettings', tenantSettings);\n }\n\n getFinishTypes(): Observable {\n return this.restApiService.getData('AdminPanel/FinishTypes');\n }\n\n addFinishType(body): Observable {\n return this.restApiService.create('AdminPanel/FinishTypes/Add', body);\n }\n\n updateFinishType(body: any): Observable {\n return this.restApiService.customPatchData('AdminPanel/FinishTypes/Update', body);\n }\n\n deleteFinishType(id: number): Observable {\n return this.restApiService.delete(`AdminPanel/FinishTypes/Delete/${id}`);\n }\n\n updateElapsedDaysThresholds(\n thresholdsConfiguration: RestThresholdsConfiguration\n ): Observable {\n return this.restApiService.associate('AdminPanel/ElapsedDaysThresholds', thresholdsConfiguration);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { first } from 'lodash';\nimport { BehaviorSubject, Observable, finalize, of, switchMap } from 'rxjs';\n\nimport { RestapiService, RestapiServiceWithoutTimezone } from '@app/services/restapi.service';\nimport { TimezoneEntityHelper } from '@main-application/management/components/system-configuration/components/timezone-entity.helper';\nimport { TimezoneHelper } from '@main-application/management/components/system-configuration/components/timezone.helper';\nimport { TurnoverStepTimer } from '@main-application/turnovers/interfaces/timers.interface';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport {\n PostTurnoverModel,\n RestArchivedTurnover,\n RestTurnoverDataModel,\n RestTurnoverTaskModel,\n RestWorkflowTemplate,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\n\nimport { CacheService } from './cache.service';\n\nclass TurnoverPatchOperation {\n op: 'add' | 'replace' | 'remove';\n path: KeyOfClassWithType | string;\n value: T;\n}\n\ntype KeyOfClassWithType = {\n [Property in keyof Class]: Class[Property] extends AllowedType ? Property : never;\n}[keyof Class];\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnoversService {\n kanbanListLoading = new BehaviorSubject(false);\n kanbanListLoading$ = this.kanbanListLoading.asObservable();\n\n constructor(\n private restApiService: RestapiService,\n private cacheService: CacheService,\n private restapiWithoutTimezone: RestapiServiceWithoutTimezone\n ) {}\n\n create(postTurnoverModel: PostTurnoverModel): Observable {\n return this.restApiService.create(\n `Turnovers`,\n postTurnoverModel,\n null,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n public static fixTimezoneForTurnoverTaskModel(data: RestTurnoverTaskModel[], timezone: number) {\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient(e.turnoverData, timezone));\n return data;\n }\n\n public static fixTimezoneForArchivedTurnoverTaskModel(data: RestArchivedTurnover[], timezone: number) {\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForArchivedTurnoverDataModelToClient(e, timezone));\n return data;\n }\n\n getTurnover(turnoverId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/${turnoverId}`,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n update(turnoverData: RestTurnoverDataModel): Observable {\n return this.restApiService.update(\n `Turnovers/${turnoverData.id}`,\n turnoverData,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToServer,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n patch(id: number, patchData: TurnoverPatchOperation[]): Observable {\n return this.restApiService.customPatchData[]>(\n `Turnovers/${id}`,\n patchData,\n data => {\n data.forEach(e => {\n if (['dateMoveIn', 'dateMoveOut', 'pmsMoveOutDate', 'dateAvailable', 'dateAvailable'].includes(e.path)) {\n e.value = TimezoneHelper.removeTimeZone(e.value as Date) as T;\n }\n });\n return data;\n },\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n updateMoveOutDateSortOrder(turnoverId: number, boardId: number, sortOrderValue: number): Observable {\n return this.restApiService.post(`Turnovers/${turnoverId}/UpdateMoveOutPosition`, {\n boardId,\n position: sortOrderValue,\n });\n }\n\n updateMoveInDateSortOrder(turnoverId: number, boardId: number, sortOrderValue: number): Observable {\n return this.restApiService.post(`Turnovers/${turnoverId}/UpdateMoveInPosition`, {\n boardId,\n position: sortOrderValue,\n });\n }\n\n patchAdditionalData(\n turnoverId: number,\n boardId: number,\n patchData: TurnoverPatchOperation[]\n ): Observable {\n this.cacheService.expireCachedInfo('getPortfolioTurnovers');\n\n return this.restApiService.customPatchData[]>(\n `Turnovers/additionalData/${turnoverId}/${boardId}`,\n patchData\n );\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Turnovers/${first(attachmentToEntity.turnoverIds)}/Attachments`,\n attachmentToEntity\n );\n }\n\n updateAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.update(\n `Turnovers/${first(attachmentToEntity.turnoverIds)}/Attachments`,\n attachmentToEntity\n );\n }\n\n getPropertyTurnovers(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/property/${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n getCachedPortfolioTurnovers(portfolioId: number): Observable {\n this.kanbanListLoading.next(true);\n return this.restApiService\n .getData(`Turnovers/getlatestversionbyportfolioid?portfolioId=${portfolioId}`)\n .pipe(\n switchMap(version => {\n return this.cacheService.getCachedInfo(\n 'getPortfolioTurnovers',\n portfolioId,\n (id: number) => this.getPortfolioTurnovers(id),\n version\n );\n }),\n finalize(() => this.kanbanListLoading.next(false))\n );\n }\n\n getArchivedPortfolioTurnovers(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/portfolio/${portfolioId}/archived`,\n TurnoversService.fixTimezoneForArchivedTurnoverTaskModel\n );\n }\n\n getPortfolioTurnovers(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/portfolio/${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n getAllTasks(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/alltasks?portfolioId=${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n deleteTurnover(turnoverId: number): Observable {\n return this.restApiService.delete(`Turnovers/${turnoverId}`);\n }\n\n deleteTurnoverAttachment(turnoverId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Turnovers/${turnoverId}/Attachments/${attachmentId}`);\n }\n\n getTurnoversAttachments(turnoverId: number): Observable {\n return this.restApiService.getData(`Turnovers/${turnoverId}/Attachments`);\n }\n\n toggleAllSections(allPropertyIds: number[], active: boolean): Observable {\n return of(active ? allPropertyIds : []);\n }\n\n toggleSingleSection(activePropertyIds: number[], propertyId: number, active: boolean): Observable {\n if (active) {\n return of([...activePropertyIds, propertyId]);\n }\n return of(activePropertyIds.filter(value => value !== propertyId));\n }\n\n getTurnoversTimers(turnoverId: number): Observable {\n return this.restapiWithoutTimezone.getData(`Turnovers/${turnoverId}/timers`);\n }\n\n updateTurnoversTimers(turnoverId: number, timers: TurnoverStepTimer[]): Observable {\n return this.restApiService.create(`Turnovers/${turnoverId}/updateTimersData`, timers);\n }\n\n restoreTurnover(turnoverId: number) {\n return this.restApiService.post(`Turnovers/restore/${turnoverId}`);\n }\n\n getWorkflowTemplates(): Observable {\n return this.restApiService.getData(`Turnovers/GetWorkflowTemplates`);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { NonPmsModelModel } from '@shared/interfaces/turnover.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class UnitNonPmsService {\n constructor(private restApiService: RestapiService) {}\n\n add(data: NonPmsModelModel) {\n return this.restApiService.create(`Units/nonPms`, data);\n }\n\n update(data: NonPmsModelModel) {\n return this.restApiService.update(`Units/nonPms`, data);\n }\n\n delete(id: number) {\n return this.restApiService.delete(`Units/nonPms/${id}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, catchError } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\nimport { RestPropertyUnits, RestUnitModel, RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable({ providedIn: 'root' })\nexport class UnitsService {\n constructor(private restApiService: RestapiService, private snackbarService: SnackbarService) {}\n\n update(unit: RestUnitModel) {\n return this.restApiService.update(`Units/${unit.id}`, unit).pipe(\n catchError((_err, c) => {\n this.snackbarService.error(SnackbarErrorMessage.UpdatingUnit);\n return c;\n })\n );\n }\n\n getPropertyUnits(propertyId: number): Observable {\n return this.restApiService.getData(`Units/property/${propertyId}`);\n }\n\n getPropertiesUnits(propertyIds: number[]): Observable {\n return this.restApiService.getData(`Units/all?propertyIds=${propertyIds.join(',')}`);\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Units/${attachmentToEntity.unitId}/Attachments`,\n attachmentToEntity\n );\n }\n\n getUnitAttachments(unitId: number): Observable {\n return this.restApiService.getData(`Units/${unitId}/Attachments`);\n }\n\n deleteUnitAttachment(unitId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Units/${unitId}/Attachments/${attachmentId}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { find } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { getUserItems, getUserOrVendorItems } from '@shared/functions/get-user-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserClaims } from '@shared/interfaces/user-claims';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { InviteRestUserModel, RestUserModel, UpdateRestUserModel } from '@shared/interfaces/user.interface';\n\nimport { CacheService } from './cache.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n constructor(private restApiService: RestapiService, private cacheService: CacheService) {}\n\n getCachedUserList(isActive?: boolean): Observable {\n return this.cacheService\n .getCachedInfo('getUserList', 0, () => this.getUserList())\n .pipe(map(list => (typeof isActive !== 'boolean' ? list : list.filter(e => e.isActive === isActive))));\n }\n\n getCachedUserOrVendorList(): Observable[]> {\n return this.getCachedUserList(true).pipe(map(list => getUserOrVendorItems(list)));\n }\n\n getCachedUserListOptions(): Observable[]> {\n return this.getCachedUserList(true).pipe(map(list => getUserItems(list)));\n }\n\n getUserList(): Observable {\n return this.restApiService.getData(`Users/`);\n }\n\n getCachedPropertyUserList(propertyId: number, isActive?: boolean): Observable {\n return this.cacheService\n .getCachedInfo('getPropertyUserList', propertyId, () => this.getPropertyUserList(propertyId))\n .pipe(map(list => (typeof isActive !== 'boolean' ? list : list.filter(e => e.isActive === isActive))));\n }\n\n getPropertyUserList(propertyId: number): Observable {\n return this.restApiService.getData(`Users/property/${propertyId}`);\n }\n\n expireCashedUserData() {\n this.cacheService.expireCachedInfo('getUserData');\n this.cacheService.expireCachedInfo('getPropertyUserList');\n }\n\n getCashedUserData(): Observable {\n return this.cacheService.getCachedInfo('getUserData', 0, () => this.getUserData());\n }\n\n getUserData(): Observable {\n return this.restApiService.getData(`users/claims`).pipe(\n map(result => {\n const userId = find(result, { claim: 'DbUserId' });\n const email = find(result, { claim: 'UserEmail' });\n const name = find(result, { claim: 'name' });\n // todo - temporary\n const firstName = find(result, {\n claim: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname',\n })?.value;\n const lastName = find(result, {\n claim: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname',\n })?.value;\n\n const generalRole = find(result, {\n claim: 'GeneralRole',\n })?.value;\n\n const companyId = find(result, {\n claim: 'CompanyId',\n })?.value;\n\n const userType: UserType = (parseInt(\n find(result, {\n claim: 'UserTypeEnumValue',\n })?.value\n ) || 0) as UserType;\n\n const permissionLevel = result\n .filter(item => item.claim === 'PermissionLevel')\n .map(item => item.value as PermissionLevelType);\n\n return {\n email: email?.value,\n id: Number.parseInt(userId?.value),\n name: name.value,\n firstName,\n lastName,\n permissionLevel,\n generalRole,\n companyId: companyId ? parseInt(companyId, 10) : null,\n userType,\n };\n })\n );\n }\n\n getUserById(id: number): Observable {\n return this.restApiService.getData(`Users/${id}`);\n }\n\n setUserData(user: UpdateRestUserModel): Observable {\n this.expireCashedUserData();\n return this.restApiService.update(`Users/`, user);\n }\n\n removeUser(user: UserWithGeneralRole): Observable {\n this.expireCashedUserData();\n return this.restApiService.delete(`users/${user.id}`);\n }\n\n reactivateUser(user: UserWithGeneralRole): Observable {\n this.expireCashedUserData();\n return this.restApiService.create(`users/reactivate?id=${user.id}`, {});\n }\n\n inviteUser(user: InviteRestUserModel): Observable {\n this.expireCashedUserData();\n return this.restApiService.associate(`Users/Invitations`, user);\n }\n\n resendInvitationEmail(userId: number): Observable {\n return this.restApiService.create(`Users/${userId}/ResendInvitation`, {});\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, catchError, map, mergeMap, of, switchMap } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TurnoverConfigurationStepAssigneesService } from '@main-application/management/components/turnover-configuration/components/turnover-configuration-step-assignees/services/turnover-configuration-step-assignees.service';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport {\n RestTurnoverDataModel,\n RestTurnoverTaskModel,\n isRestTurnoverTaskModel,\n} from '@shared/interfaces/turnover.interface';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkflowActionsService {\n constructor(\n private restApiService: RestapiService,\n private snackbarService: SnackbarService,\n private responsiblePartiesService: TurnoverConfigurationStepAssigneesService,\n protected modalsService: ModalsService\n ) {}\n\n setWorkflowStepAssignee(turnoverId: number, stepType: WorkflowStepEnumType, assigneeId: number): Observable {\n return this.restApiService.associate(`WorkflowActions/${turnoverId}/${stepType}/${assigneeId}`, null).pipe(\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingTurnoverStepAssignee);\n throw err;\n })\n );\n }\n\n moveToNextStep(\n turnoverId: number,\n stepType: WorkflowStepEnumType,\n assigneeId: number,\n boardId: number = null,\n rememberIt = false\n ) {\n if (typeof assigneeId === 'number')\n return this.restApiService.post(\n `turnovers/${turnoverId}/transit/${stepType}/${assigneeId}?rememberIt=${rememberIt}&source=${\n boardId ? `1&sourceId=${boardId}` : '0'\n }`\n );\n return this.restApiService.post(\n `turnovers/${turnoverId}/transit/${stepType}?source=${boardId ? `1&sourceId=${boardId}` : '0'}`\n );\n }\n\n moveToNextStepWithDefaultAssignee(\n turnover: RestTurnoverDataModel | RestTurnoverTaskModel,\n stepType: WorkflowStepEnumType,\n boardId: number = null\n ) {\n return this.getAssignee(turnover, stepType).pipe(\n mergeMap(assigneeInfo => {\n if (!assigneeInfo) {\n return of(false);\n }\n return this.moveToNextStep(\n turnover.id,\n stepType,\n assigneeInfo.assigneeId,\n boardId,\n assigneeInfo.rememberIt ?? false\n ).pipe(map(() => true));\n })\n );\n }\n\n getAssignee(turnover: RestTurnoverDataModel | RestTurnoverTaskModel, stepType: WorkflowStepEnumType) {\n if (stepType === WorkflowStepEnumType.Archive) {\n return of({} as WorkflowAction);\n }\n\n let turnoverData: RestTurnoverDataModel;\n let propertyId: number;\n let propertyName: string;\n if (isRestTurnoverTaskModel(turnover)) {\n turnoverData = turnover.turnoverData;\n propertyId = turnover.propertyId;\n propertyName = turnover.propertyName;\n } else {\n turnoverData = turnover;\n }\n propertyId = propertyId ?? turnoverData.property?.id;\n propertyName = propertyName ?? turnoverData.property?.name;\n\n const currentAssigneeId = turnoverData.workflow.find(e => e.workflowStepEnumType === stepType)?.responsiblePartyId;\n if (currentAssigneeId) {\n return of({ assigneeId: currentAssigneeId } as WorkflowAction);\n }\n return this.responsiblePartiesService.getResponsiblePartiesByPropertyId(propertyId).pipe(\n map(list => list?.find(step => step.workflowStepEnumType === stepType)?.responsiblePartyId),\n switchMap(defaultAssigneeId => {\n if (defaultAssigneeId) {\n return of({ assigneeId: defaultAssigneeId } as WorkflowAction);\n } else {\n return this.modalsService\n .openNextStepAssigneeModal(turnoverData, stepType, propertyId, propertyName)\n .afterClosed();\n }\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkflowStepCommentsService {\n constructor(private restApiService: RestapiService) {}\n\n create(comment: RestWorkflowStepCommentModel): Observable {\n return this.restApiService.create(`WorkflowStepComments`, comment);\n }\n\n update(comment: RestWorkflowStepCommentModel): Observable {\n return this.restApiService.update(`WorkflowStepComments/${comment.id}`, comment);\n }\n\n delete(commentId: number): Observable {\n return this.restApiService.delete(`WorkflowStepComments/${commentId}`);\n }\n\n getWorkflowStepComments(turnoverId: number): Observable {\n return this.restApiService.getData(`WorkflowStepComments/turnover/${turnoverId}`);\n }\n\n addReaction(commentId: number, reactionId: string): Observable {\n return this.restApiService.post(\n `WorkflowStepComments/${commentId}/AddReaction?reactionId=${encodeURIComponent(reactionId)}`,\n {}\n );\n }\n\n deleteReaction(commentId: number, reactionId: string): Observable {\n return this.restApiService.post(\n `WorkflowStepComments/${commentId}/DeleteReaction?reactionId=${encodeURIComponent(reactionId)}`,\n {}\n );\n }\n}\n","export class EnvironmentConfig {\n type: EnvironmentType;\n ver: string;\n authBaseUrl: string;\n apiUrl: string;\n openApiUrl: string;\n notificationsUrl: string;\n notificationsAllUrl: string;\n disableForm: boolean;\n showAuthorizeLogs: boolean;\n showBuildTime: boolean;\n azureAuthConfig: {\n b2cDirectory: string;\n stsBase: string;\n tenant: string;\n policyKey: string;\n stsServer: string;\n clientID: string;\n b2cScopes: string;\n redirectUrl: string;\n postLogoutRedirectUrl: string;\n forgotPasswordUrl: string;\n };\n}\n\nexport enum EnvironmentType {\n Demo,\n Dev,\n Local,\n Prod,\n QA,\n}\n","import { EnvironmentConfig, EnvironmentType } from './environment-config';\n\nexport const environment: EnvironmentConfig = {\n type: EnvironmentType.Dev,\n ver: '1.5.1',\n authBaseUrl: 'https://propupdevb2c.b2clogin.com/propupdevb2c.onmicrosoft.com/oauth2/v2.0',\n apiUrl: 'https://api.propup-dev.com/api',\n openApiUrl: 'https://api.propup-dev.com/openApi',\n notificationsUrl: 'https://api.propup-dev.com/notifications',\n notificationsAllUrl: 'https://api.propup-dev.com/all_notifications',\n disableForm: true,\n showAuthorizeLogs: true,\n showBuildTime: true,\n azureAuthConfig: {\n b2cDirectory: 'propupdevb2c',\n stsBase: 'propupdevb2c.b2clogin.com',\n tenant: 'propupdevb2c.onmicrosoft.com',\n policyKey: 'B2C_1_SignUpSignIn',\n stsServer: 'https://propupdevb2c.b2clogin.com/propupdevb2c.onmicrosoft.com/B2C_1_SignUpSignIn/v2.0',\n clientID: 'b6a9b7da-a6f9-4664-9772-e93ada0e7c57',\n b2cScopes: 'openid offline_access b6a9b7da-a6f9-4664-9772-e93ada0e7c57',\n redirectUrl: 'https://propup-dev.com/accept-token',\n postLogoutRedirectUrl: 'https://propup-dev.com/login',\n forgotPasswordUrl: '',\n },\n};\n","import { Injectable } from '@angular/core';\nimport { AbstractSecurityStorage } from 'angular-auth-oidc-client';\n\nconst OIDC_STORAGE_KEY_PREFIX = 'oidc_key';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OidcStorageService implements AbstractSecurityStorage {\n read(key: string) {\n return localStorage.getItem(this.getKey(key));\n }\n\n write(key: string, value: any): void {\n localStorage.setItem(this.getKey(key), value);\n }\n\n remove(key: string): void {\n localStorage.removeItem(this.getKey(key));\n }\n\n clear(): void {\n Object.keys(localStorage)\n .filter(key => key.startsWith(OIDC_STORAGE_KEY_PREFIX))\n .forEach(key => {\n localStorage.removeItem(this.getKey(key));\n });\n }\n\n private getKey(key: string) {\n return `${OIDC_STORAGE_KEY_PREFIX}_${key}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomIconService {\n constructor(private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer) {}\n\n registerIcons() {\n Object.keys(EIcon).forEach(key => {\n const iconName = EIcon[key];\n this.matIconRegistry.addSvgIcon(\n iconName,\n this.domSanitizer.bypassSecurityTrustResourceUrl(`../assets/icon/${iconName}.svg`)\n );\n });\n }\n}\n","import { ChangeDetectorRef, Component, HostListener, OnInit } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { Meta } from '@angular/platform-browser';\nimport { Router, RoutesRecognized } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { filter, map, pairwise } from 'rxjs/operators';\n\nimport { CustomIconService } from '@app/services/custom-icon.service';\nimport { closeMenus } from '@main-application/boards/store/boards.actions';\nimport { setPreviousRoute } from '@shared/actions/route-state.action';\nimport { setWindowWidth } from '@shared/actions/window-resize.actions';\nimport { AuthService } from '@shared/services/auth.service';\n\nimport { environment } from '../environments/environment';\n\n@UntilDestroy()\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n})\nexport class AppComponent implements OnInit {\n environment = environment;\n isAuthenticated = false;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private router: Router,\n private metaService: Meta,\n private store: Store<{}>,\n customIconService: CustomIconService,\n iconRegistry: MatIconRegistry\n ) {\n customIconService.registerIcons();\n iconRegistry.setDefaultFontSetClass('material-icons');\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(evt => evt instanceof RoutesRecognized),\n map(evt => evt as RoutesRecognized),\n pairwise()\n )\n .subscribe(([previousEvent, _event]) => {\n if (previousEvent?.state) {\n this.store.dispatch(setPreviousRoute({ previousRoute: previousEvent.urlAfterRedirects }));\n }\n });\n }\n\n @HostListener('window:click', ['$event'])\n @HostListener('window:contextmenu', ['$event'])\n onClick(event) {\n this.store.dispatch(closeMenus());\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.store.dispatch(setWindowWidth({ windowWidth: event.target.innerWidth }));\n }\n\n ngOnInit() {\n this.store.dispatch(setWindowWidth({ windowWidth: window.innerWidth }));\n\n this.metaService.addTag(\n {\n name: 'author',\n content: this.environment.ver,\n },\n true\n );\n }\n}\n","\n","import { Location } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { Observable, map, mergeMap, of, take } from 'rxjs';\n\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { AuthService } from '@shared/services/auth.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoginRouteGuard implements CanActivate {\n constructor(\n private router: Router,\n private authService: AuthService,\n private oidcService: OidcSecurityService,\n private location: Location\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable {\n const currentUrl = window.location.href;\n\n if (this.isAuthenticationInProgress() || this.authService.isAuthenticated()) {\n return of(true);\n }\n\n return this.oidcService.checkAuth().pipe(\n take(1),\n mergeMap(() =>\n this.oidcService.getAuthenticationResult().pipe(\n map(accessToken => {\n if (accessToken) {\n return true;\n }\n\n const loginUrlTree = this.router.parseUrl(AppRoutes.LOGIN);\n loginUrlTree.queryParams['returnUrl'] = currentUrl;\n return loginUrlTree;\n })\n )\n )\n );\n }\n\n private isAuthenticationInProgress() {\n return (\n this.location.path() === AppRoutes.LOGIN ||\n this.location.path() === AppRoutes.ACCEPT_TOKEN ||\n this.location.path() === AppRoutes.ROOT ||\n !!window.location.hash\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { LoginRouteGuard } from '@shared/guards/login-route.guard';\n\n// Use the AuthGuard for protected routes\nconst routes: Routes = [\n {\n path: RoutePath.LOGIN,\n loadChildren: () => import('@app/modules/login/login.module').then(m => m.LoginModule),\n },\n {\n path: RoutePath.ACCEPT_TOKEN,\n loadChildren: () => import('@app/modules/accept-token/accept-token.module').then(m => m.AcceptTokenModule),\n },\n {\n path: RoutePath.WIDGET_BOARD_RESCHEDULE,\n loadComponent: () =>\n import('@widgets/board-builder/reschedule-widget/reschedule-widget.component').then(\n m => m.RescheduleWidgetComponent\n ),\n },\n {\n path: RoutePath.WIDGET_BOARD_DONE,\n loadComponent: () =>\n import('@widgets/board-builder/done-widget/done-widget.component').then(m => m.DoneWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_COMMENT,\n loadComponent: () =>\n import('@widgets/board-builder/comment-widget/comment-widget.component').then(m => m.CommentWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_ACCEPT,\n loadComponent: () => import('@widgets/bid-management/accept-widget.component').then(m => m.AcceptWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_REJECT,\n loadComponent: () => import('@widgets/bid-management/reject-widget.component').then(m => m.RejectWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_APPROVE,\n loadComponent: () => import('@widgets/bid-management/approve-widget.component').then(m => m.ApproveWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_DENY,\n loadComponent: () => import('@widgets/bid-management/deny-widget.component').then(m => m.DenyWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_COMMENT,\n loadComponent: () => import('@widgets/bid-management/comment-widget.component').then(m => m.CommentWidgetComponent),\n },\n {\n path: ``,\n canActivate: [LoginRouteGuard],\n loadChildren: () => import('@main-application/main-application.module').then(m => m.MainApplicationModule),\n },\n { path: '**', redirectTo: '/home' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","import { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { AbstractSecurityStorage, AuthModule, LogLevel, OidcSecurityService } from 'angular-auth-oidc-client';\n\nimport { OidcStorageService } from '@app/services/oidc-storage.service';\nimport { SharedStoreModule } from '@dashboards/shared-store.module';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { SharedModule } from '@shared/shared.module';\nimport { EnvironmentType } from 'src/environments/environment-config';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app.routing.module';\nimport { environment } from '../environments/environment';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [\n AppRoutingModule,\n AuthModule.forRoot({\n config: {\n authority: environment.azureAuthConfig.stsServer,\n redirectUrl: environment.azureAuthConfig.redirectUrl,\n clientId: environment.azureAuthConfig.clientID,\n responseType: 'id_token token',\n autoUserInfo: false,\n scope: environment.azureAuthConfig.b2cScopes,\n postLogoutRedirectUri: environment.azureAuthConfig.postLogoutRedirectUrl,\n silentRenew: true,\n useRefreshToken: true,\n forbiddenRoute: AppRoutes.NO_PERMISSION,\n unauthorizedRoute: AppRoutes.NO_PERMISSION,\n silentRenewUrl: environment.azureAuthConfig.redirectUrl,\n renewTimeBeforeTokenExpiresInSeconds: 43200,\n logLevel: environment.showAuthorizeLogs ? LogLevel.Debug : LogLevel.None,\n maxIdTokenIatOffsetAllowedInSeconds: 86400,\n triggerAuthorizationResultEvent: true,\n },\n }),\n StoreModule.forRoot({}),\n StoreDevtoolsModule.instrument({ maxAge: 25, logOnly: environment.type === EnvironmentType.Prod }),\n EffectsModule.forRoot([]),\n SharedStoreModule,\n BrowserAnimationsModule,\n BrowserModule,\n HttpClientModule,\n SharedModule,\n\n MatSnackBarModule,\n MatDialogModule,\n ],\n providers: [OidcSecurityService, { provide: AbstractSecurityStorage, useClass: OidcStorageService }],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { DEFAULT_CURRENCY_CODE, enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\nimport { EnvironmentType } from './environments/environment-config';\n\nif (environment.type === EnvironmentType.Prod) {\n enableProdMode();\n}\n\nplatformBrowserDynamic()\n .bootstrapModule(AppModule, {\n providers: [{ provide: DEFAULT_CURRENCY_CODE, useValue: 'USD' }],\n })\n .catch(err => console.error(err));\n","var map = {\n\t\"./af\": 58685,\n\t\"./af.js\": 58685,\n\t\"./ar\": 254,\n\t\"./ar-dz\": 4312,\n\t\"./ar-dz.js\": 4312,\n\t\"./ar-kw\": 32614,\n\t\"./ar-kw.js\": 32614,\n\t\"./ar-ly\": 18630,\n\t\"./ar-ly.js\": 18630,\n\t\"./ar-ma\": 28674,\n\t\"./ar-ma.js\": 28674,\n\t\"./ar-sa\": 49032,\n\t\"./ar-sa.js\": 49032,\n\t\"./ar-tn\": 24730,\n\t\"./ar-tn.js\": 24730,\n\t\"./ar.js\": 254,\n\t\"./az\": 53052,\n\t\"./az.js\": 53052,\n\t\"./be\": 60150,\n\t\"./be.js\": 60150,\n\t\"./bg\": 63069,\n\t\"./bg.js\": 63069,\n\t\"./bm\": 13466,\n\t\"./bm.js\": 13466,\n\t\"./bn\": 18516,\n\t\"./bn-bd\": 90557,\n\t\"./bn-bd.js\": 90557,\n\t\"./bn.js\": 18516,\n\t\"./bo\": 26273,\n\t\"./bo.js\": 26273,\n\t\"./br\": 9588,\n\t\"./br.js\": 9588,\n\t\"./bs\": 19815,\n\t\"./bs.js\": 19815,\n\t\"./ca\": 83331,\n\t\"./ca.js\": 83331,\n\t\"./cs\": 21320,\n\t\"./cs.js\": 21320,\n\t\"./cv\": 72219,\n\t\"./cv.js\": 72219,\n\t\"./cy\": 68266,\n\t\"./cy.js\": 68266,\n\t\"./da\": 66427,\n\t\"./da.js\": 66427,\n\t\"./de\": 67435,\n\t\"./de-at\": 52871,\n\t\"./de-at.js\": 52871,\n\t\"./de-ch\": 12994,\n\t\"./de-ch.js\": 12994,\n\t\"./de.js\": 67435,\n\t\"./dv\": 82357,\n\t\"./dv.js\": 82357,\n\t\"./el\": 95649,\n\t\"./el.js\": 95649,\n\t\"./en-au\": 59961,\n\t\"./en-au.js\": 59961,\n\t\"./en-ca\": 19878,\n\t\"./en-ca.js\": 19878,\n\t\"./en-gb\": 3924,\n\t\"./en-gb.js\": 3924,\n\t\"./en-ie\": 70864,\n\t\"./en-ie.js\": 70864,\n\t\"./en-il\": 91579,\n\t\"./en-il.js\": 91579,\n\t\"./en-in\": 30940,\n\t\"./en-in.js\": 30940,\n\t\"./en-nz\": 16181,\n\t\"./en-nz.js\": 16181,\n\t\"./en-sg\": 44301,\n\t\"./en-sg.js\": 44301,\n\t\"./eo\": 85291,\n\t\"./eo.js\": 85291,\n\t\"./es\": 54529,\n\t\"./es-do\": 53764,\n\t\"./es-do.js\": 53764,\n\t\"./es-mx\": 12584,\n\t\"./es-mx.js\": 12584,\n\t\"./es-us\": 63425,\n\t\"./es-us.js\": 63425,\n\t\"./es.js\": 54529,\n\t\"./et\": 35203,\n\t\"./et.js\": 35203,\n\t\"./eu\": 70678,\n\t\"./eu.js\": 70678,\n\t\"./fa\": 83483,\n\t\"./fa.js\": 83483,\n\t\"./fi\": 96262,\n\t\"./fi.js\": 96262,\n\t\"./fil\": 52521,\n\t\"./fil.js\": 52521,\n\t\"./fo\": 34555,\n\t\"./fo.js\": 34555,\n\t\"./fr\": 63131,\n\t\"./fr-ca\": 88239,\n\t\"./fr-ca.js\": 88239,\n\t\"./fr-ch\": 21702,\n\t\"./fr-ch.js\": 21702,\n\t\"./fr.js\": 63131,\n\t\"./fy\": 267,\n\t\"./fy.js\": 267,\n\t\"./ga\": 23821,\n\t\"./ga.js\": 23821,\n\t\"./gd\": 71753,\n\t\"./gd.js\": 71753,\n\t\"./gl\": 4074,\n\t\"./gl.js\": 4074,\n\t\"./gom-deva\": 92762,\n\t\"./gom-deva.js\": 92762,\n\t\"./gom-latn\": 5969,\n\t\"./gom-latn.js\": 5969,\n\t\"./gu\": 82809,\n\t\"./gu.js\": 82809,\n\t\"./he\": 45402,\n\t\"./he.js\": 45402,\n\t\"./hi\": 315,\n\t\"./hi.js\": 315,\n\t\"./hr\": 10410,\n\t\"./hr.js\": 10410,\n\t\"./hu\": 38288,\n\t\"./hu.js\": 38288,\n\t\"./hy-am\": 67928,\n\t\"./hy-am.js\": 67928,\n\t\"./id\": 71334,\n\t\"./id.js\": 71334,\n\t\"./is\": 86959,\n\t\"./is.js\": 86959,\n\t\"./it\": 34864,\n\t\"./it-ch\": 51124,\n\t\"./it-ch.js\": 51124,\n\t\"./it.js\": 34864,\n\t\"./ja\": 36141,\n\t\"./ja.js\": 36141,\n\t\"./jv\": 29187,\n\t\"./jv.js\": 29187,\n\t\"./ka\": 42136,\n\t\"./ka.js\": 42136,\n\t\"./kk\": 94332,\n\t\"./kk.js\": 94332,\n\t\"./km\": 18607,\n\t\"./km.js\": 18607,\n\t\"./kn\": 84305,\n\t\"./kn.js\": 84305,\n\t\"./ko\": 70234,\n\t\"./ko.js\": 70234,\n\t\"./ku\": 16003,\n\t\"./ku.js\": 16003,\n\t\"./ky\": 75061,\n\t\"./ky.js\": 75061,\n\t\"./lb\": 32786,\n\t\"./lb.js\": 32786,\n\t\"./lo\": 66183,\n\t\"./lo.js\": 66183,\n\t\"./lt\": 50029,\n\t\"./lt.js\": 50029,\n\t\"./lv\": 24169,\n\t\"./lv.js\": 24169,\n\t\"./me\": 68577,\n\t\"./me.js\": 68577,\n\t\"./mi\": 68177,\n\t\"./mi.js\": 68177,\n\t\"./mk\": 50337,\n\t\"./mk.js\": 50337,\n\t\"./ml\": 65260,\n\t\"./ml.js\": 65260,\n\t\"./mn\": 52325,\n\t\"./mn.js\": 52325,\n\t\"./mr\": 14695,\n\t\"./mr.js\": 14695,\n\t\"./ms\": 75334,\n\t\"./ms-my\": 37151,\n\t\"./ms-my.js\": 37151,\n\t\"./ms.js\": 75334,\n\t\"./mt\": 63570,\n\t\"./mt.js\": 63570,\n\t\"./my\": 97963,\n\t\"./my.js\": 97963,\n\t\"./nb\": 88028,\n\t\"./nb.js\": 88028,\n\t\"./ne\": 86638,\n\t\"./ne.js\": 86638,\n\t\"./nl\": 50302,\n\t\"./nl-be\": 66782,\n\t\"./nl-be.js\": 66782,\n\t\"./nl.js\": 50302,\n\t\"./nn\": 33501,\n\t\"./nn.js\": 33501,\n\t\"./oc-lnc\": 50563,\n\t\"./oc-lnc.js\": 50563,\n\t\"./pa-in\": 50869,\n\t\"./pa-in.js\": 50869,\n\t\"./pl\": 65302,\n\t\"./pl.js\": 65302,\n\t\"./pt\": 49687,\n\t\"./pt-br\": 74884,\n\t\"./pt-br.js\": 74884,\n\t\"./pt.js\": 49687,\n\t\"./ro\": 79107,\n\t\"./ro.js\": 79107,\n\t\"./ru\": 33627,\n\t\"./ru.js\": 33627,\n\t\"./sd\": 30355,\n\t\"./sd.js\": 30355,\n\t\"./se\": 83427,\n\t\"./se.js\": 83427,\n\t\"./si\": 11848,\n\t\"./si.js\": 11848,\n\t\"./sk\": 54590,\n\t\"./sk.js\": 54590,\n\t\"./sl\": 20184,\n\t\"./sl.js\": 20184,\n\t\"./sq\": 56361,\n\t\"./sq.js\": 56361,\n\t\"./sr\": 78965,\n\t\"./sr-cyrl\": 81287,\n\t\"./sr-cyrl.js\": 81287,\n\t\"./sr.js\": 78965,\n\t\"./ss\": 25456,\n\t\"./ss.js\": 25456,\n\t\"./sv\": 70451,\n\t\"./sv.js\": 70451,\n\t\"./sw\": 77558,\n\t\"./sw.js\": 77558,\n\t\"./ta\": 51356,\n\t\"./ta.js\": 51356,\n\t\"./te\": 73693,\n\t\"./te.js\": 73693,\n\t\"./tet\": 21243,\n\t\"./tet.js\": 21243,\n\t\"./tg\": 42500,\n\t\"./tg.js\": 42500,\n\t\"./th\": 55768,\n\t\"./th.js\": 55768,\n\t\"./tk\": 77761,\n\t\"./tk.js\": 77761,\n\t\"./tl-ph\": 35780,\n\t\"./tl-ph.js\": 35780,\n\t\"./tlh\": 29590,\n\t\"./tlh.js\": 29590,\n\t\"./tr\": 33807,\n\t\"./tr.js\": 33807,\n\t\"./tzl\": 93857,\n\t\"./tzl.js\": 93857,\n\t\"./tzm\": 60654,\n\t\"./tzm-latn\": 8806,\n\t\"./tzm-latn.js\": 8806,\n\t\"./tzm.js\": 60654,\n\t\"./ug-cn\": 30845,\n\t\"./ug-cn.js\": 30845,\n\t\"./uk\": 19232,\n\t\"./uk.js\": 19232,\n\t\"./ur\": 47052,\n\t\"./ur.js\": 47052,\n\t\"./uz\": 77967,\n\t\"./uz-latn\": 32233,\n\t\"./uz-latn.js\": 32233,\n\t\"./uz.js\": 77967,\n\t\"./vi\": 98615,\n\t\"./vi.js\": 98615,\n\t\"./x-pseudo\": 12320,\n\t\"./x-pseudo.js\": 12320,\n\t\"./yo\": 31313,\n\t\"./yo.js\": 31313,\n\t\"./zh-cn\": 64490,\n\t\"./zh-cn.js\": 64490,\n\t\"./zh-hk\": 55910,\n\t\"./zh-hk.js\": 55910,\n\t\"./zh-mo\": 98262,\n\t\"./zh-mo.js\": 98262,\n\t\"./zh-tw\": 44223,\n\t\"./zh-tw.js\": 44223\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;"],"x_google_ignoreList":[329]}