@netgrif/components-core 6.1.1 → 6.2.0-rc.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/esm2020/assets/i18n/de.json +19 -1
  2. package/esm2020/assets/i18n/en.json +19 -1
  3. package/esm2020/assets/i18n/sk.json +20 -2
  4. package/esm2020/lib/authorization/permission/access.service.mjs +74 -0
  5. package/esm2020/lib/authorization/public-api.mjs +2 -1
  6. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +8 -3
  7. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +7 -2
  8. package/esm2020/lib/dialog/components/prompt-dialog/prompt-dialog.component.mjs +3 -3
  9. package/esm2020/lib/filter/models/case-search-request-body.mjs +1 -1
  10. package/esm2020/lib/header/abstract-header-service.mjs +15 -8
  11. package/esm2020/lib/header/abstract-header.component.mjs +2 -2
  12. package/esm2020/lib/header/case-header/case-header.service.mjs +2 -2
  13. package/esm2020/lib/header/header-modes/search-mode/abstract-search-mode.component.mjs +3 -2
  14. package/esm2020/lib/header/task-header/task-header.service.mjs +7 -4
  15. package/esm2020/lib/header/workflow-header/workflow-header.service.mjs +11 -8
  16. package/esm2020/lib/navigation/model/uri-resource.mjs +6 -0
  17. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +386 -0
  18. package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +15 -62
  19. package/esm2020/lib/navigation/public-api.mjs +5 -1
  20. package/esm2020/lib/navigation/service/uri-resource.service.mjs +35 -0
  21. package/esm2020/lib/navigation/service/uri.service.mjs +194 -0
  22. package/esm2020/lib/panel/abstract/panel-with-immediate-data.mjs +51 -20
  23. package/esm2020/lib/panel/abstract-panel.component.mjs +23 -5
  24. package/esm2020/lib/panel/case-panel/abstract-case-panel.component.mjs +2 -2
  25. package/esm2020/lib/panel/configuration/config-params.mjs +5 -0
  26. package/esm2020/lib/panel/public-api.mjs +5 -1
  27. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +36 -6
  28. package/esm2020/lib/panel/task-panel/models/task-panel-context.mjs +2 -0
  29. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.mjs +2 -2
  30. package/esm2020/lib/panel/task-panel-single/abstract-single-task.component.mjs +81 -0
  31. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +9 -4
  32. package/esm2020/lib/process/net.mjs +8 -1
  33. package/esm2020/lib/process/public-api.mjs +3 -1
  34. package/esm2020/lib/public/factories/public-factory-resolver.mjs +3 -3
  35. package/esm2020/lib/resources/engine-endpoint/petri-net-resource.service.mjs +2 -2
  36. package/esm2020/lib/resources/engine-endpoint/public/public-task-resource.service.mjs +1 -40
  37. package/esm2020/lib/resources/engine-endpoint/task-resource.service.mjs +4 -1
  38. package/esm2020/lib/resources/interface/case.mjs +1 -1
  39. package/esm2020/lib/resources/interface/petri-net-reference.mjs +1 -1
  40. package/esm2020/lib/resources/interface/task-pair.mjs +2 -0
  41. package/esm2020/lib/resources/public-api.mjs +2 -1
  42. package/esm2020/lib/routing/redirect-service/redirect.service.mjs +2 -1
  43. package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +5 -1
  44. package/esm2020/lib/search/models/category/case/case-dataset.mjs +3 -1
  45. package/esm2020/lib/search/models/category/case/case-simple-dataset.mjs +5 -1
  46. package/esm2020/lib/side-menu/content-components/save-filter/abstract-save-filter.component.mjs +8 -7
  47. package/esm2020/lib/tabs/classes/opened-tab.mjs +19 -1
  48. package/esm2020/lib/tabs/classes/tab-label-stream.mjs +15 -0
  49. package/esm2020/lib/tabs/classes/tab-view.mjs +11 -3
  50. package/esm2020/lib/tabs/interfaces.mjs +1 -1
  51. package/esm2020/lib/tabs/public-api.mjs +3 -1
  52. package/esm2020/lib/task/services/assign-task.service.mjs +7 -6
  53. package/esm2020/lib/task/services/cancel-task.service.mjs +7 -6
  54. package/esm2020/lib/task/services/delegate-task.service.mjs +9 -8
  55. package/esm2020/lib/task/services/finish-task.service.mjs +7 -6
  56. package/esm2020/lib/task/services/task-data.service.mjs +51 -13
  57. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +3 -2
  58. package/esm2020/lib/task-content/model/task-event-notification.mjs +5 -3
  59. package/esm2020/lib/task-content/services/task-content.service.mjs +5 -2
  60. package/esm2020/lib/utility/tests/utility/create-mock-net.mjs +2 -1
  61. package/esm2020/lib/view/abstract/view-with-headers.mjs +13 -4
  62. package/esm2020/lib/view/case-view/abstract-case-view.mjs +7 -5
  63. package/esm2020/lib/view/case-view/tabbed-case-view.mjs +7 -5
  64. package/esm2020/lib/view/public-api.mjs +4 -1
  65. package/esm2020/lib/view/task-view/abstract-single-task-view.component.mjs +55 -0
  66. package/esm2020/lib/view/task-view/abstract-task-view.mjs +6 -5
  67. package/esm2020/lib/view/task-view/tabbed-task-view.mjs +6 -5
  68. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +6 -5
  69. package/fesm2015/netgrif-components-core.mjs +5900 -4921
  70. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  71. package/fesm2020/netgrif-components-core.mjs +5841 -4870
  72. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  73. package/lib/authorization/permission/access.service.d.ts +40 -0
  74. package/lib/authorization/public-api.d.ts +1 -0
  75. package/lib/filter/models/case-search-request-body.d.ts +1 -0
  76. package/lib/header/abstract-header-service.d.ts +6 -3
  77. package/lib/header/abstract-header.component.d.ts +1 -1
  78. package/lib/header/task-header/task-header.service.d.ts +3 -2
  79. package/lib/header/workflow-header/workflow-header.service.d.ts +3 -2
  80. package/lib/navigation/model/uri-resource.d.ts +15 -0
  81. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +138 -0
  82. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +3 -30
  83. package/lib/navigation/public-api.d.ts +4 -0
  84. package/lib/navigation/service/uri-resource.service.d.ts +18 -0
  85. package/lib/navigation/service/uri.service.d.ts +75 -0
  86. package/lib/panel/abstract/panel-with-immediate-data.d.ts +4 -1
  87. package/lib/panel/abstract-panel.component.d.ts +8 -2
  88. package/lib/panel/configuration/config-params.d.ts +3 -0
  89. package/lib/panel/public-api.d.ts +3 -0
  90. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +11 -4
  91. package/lib/panel/task-panel/models/task-panel-context.d.ts +19 -0
  92. package/lib/panel/task-panel-single/abstract-single-task.component.d.ts +42 -0
  93. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +4 -1
  94. package/lib/process/net.d.ts +6 -0
  95. package/lib/process/public-api.d.ts +2 -0
  96. package/lib/public/factories/public-factory-resolver.d.ts +2 -1
  97. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +0 -12
  98. package/lib/resources/interface/case.d.ts +8 -0
  99. package/lib/resources/interface/petri-net-reference.d.ts +4 -0
  100. package/lib/resources/interface/task-pair.d.ts +4 -0
  101. package/lib/resources/public-api.d.ts +1 -0
  102. package/lib/routing/routing-builder/routing-builder.service.d.ts +1 -0
  103. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +2 -1
  104. package/lib/tabs/classes/opened-tab.d.ts +8 -1
  105. package/lib/tabs/classes/tab-label-stream.d.ts +7 -0
  106. package/lib/tabs/interfaces.d.ts +12 -1
  107. package/lib/tabs/public-api.d.ts +2 -0
  108. package/lib/task/services/assign-task.service.d.ts +4 -2
  109. package/lib/task/services/cancel-task.service.d.ts +4 -2
  110. package/lib/task/services/delegate-task.service.d.ts +5 -3
  111. package/lib/task/services/finish-task.service.d.ts +4 -2
  112. package/lib/task/services/task-data.service.d.ts +12 -3
  113. package/lib/task-content/model/task-event-notification.d.ts +7 -1
  114. package/lib/task-content/services/task-content.service.d.ts +1 -0
  115. package/lib/view/abstract/view-with-headers.d.ts +5 -1
  116. package/lib/view/case-view/abstract-case-view.d.ts +4 -2
  117. package/lib/view/case-view/tabbed-case-view.d.ts +4 -2
  118. package/lib/view/public-api.d.ts +3 -0
  119. package/lib/view/task-view/abstract-single-task-view.component.d.ts +25 -0
  120. package/lib/view/task-view/abstract-task-view.d.ts +2 -1
  121. package/lib/view/task-view/tabbed-task-view.d.ts +2 -1
  122. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +2 -1
  123. package/package.json +1 -1
  124. package/src/assets/i18n/de.json +19 -1
  125. package/src/assets/i18n/en.json +19 -1
  126. package/src/assets/i18n/sk.json +20 -2
@@ -0,0 +1,40 @@
1
+ import { RoleGuardService } from "../role/role-guard.service";
2
+ import { AuthorityGuardService } from "../authority/authority-guard.service";
3
+ import { GroupGuardService } from "../group/group-guard.service";
4
+ import { ConfigurationService } from "../../configuration/configuration.service";
5
+ import { View } from "../../../commons/schema";
6
+ import { UserService } from '../../user/services/user.service';
7
+ import * as i0 from "@angular/core";
8
+ export declare class AccessService {
9
+ private _config;
10
+ private _userService;
11
+ private _roleGuard;
12
+ private _authorityGuard;
13
+ private _groupGuard;
14
+ constructor(_config: ConfigurationService, _userService: UserService, _roleGuard: RoleGuardService, _authorityGuard: AuthorityGuardService, _groupGuard: GroupGuardService);
15
+ /**
16
+ * @param view the view whose access permissions we want to check
17
+ * @param url URL to which the view maps. Is used only for error message generation
18
+ * @returns whether the user can access the provided view
19
+ */
20
+ canAccessView(view: View, url?: string): boolean;
21
+ /**
22
+ * @param view the view whose access permissions we want to check
23
+ * @param url URL to which the view maps. Is used only for error message generation
24
+ * @returns whether the user passes the role guard condition for accessing the specified view
25
+ */
26
+ passesRoleGuard(view: View, url: string): boolean;
27
+ /**
28
+ * @param view the view whose access permissions we want to check
29
+ * @returns whether the user passes the authority guard condition for accessing the specified view
30
+ */
31
+ passesAuthorityGuard(view: View): boolean;
32
+ /**
33
+ * @param view the view whose access permissions we want to check
34
+ * @param url URL to which the view maps. Is used only for error message generation
35
+ * @returns whether the user passes the role guard condition for accessing the specified view
36
+ */
37
+ passesGroupGuard(view: View, url: string): boolean;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<AccessService, never>;
39
+ static ɵprov: i0.ɵɵInjectableDeclaration<AccessService>;
40
+ }
@@ -2,3 +2,4 @@ export * from './authority/authority-guard.service';
2
2
  export * from './role/role-guard.service';
3
3
  export * from './group/group-guard.service';
4
4
  export * from './permission/permission.service';
5
+ export * from './permission/access.service';
@@ -59,6 +59,7 @@ export interface CaseSearchRequestBody {
59
59
  * If more than one group ID is specified, the returned cases are instances of one of the groups.
60
60
  */
61
61
  group?: string | Array<string>;
62
+ uriNodeId?: string;
62
63
  }
63
64
  /**
64
65
  * Queries cases that are instances of a specific PetriNet
@@ -13,12 +13,14 @@ import { LoadingEmitter } from '../utility/loading-emitter';
13
13
  import { SortDirection } from '@angular/material/sort';
14
14
  import { ViewIdService } from '../user/services/view-id.service';
15
15
  import { Net } from '../process/net';
16
+ import { OverflowService } from './services/overflow.service';
16
17
  import * as i0 from "@angular/core";
17
18
  export declare abstract class AbstractHeaderService implements OnDestroy {
18
19
  protected _headerType: HeaderType;
19
20
  protected _preferences: UserPreferenceService;
20
- private _viewIdService;
21
21
  protected _logger: LoggerService;
22
+ private _viewIdService;
23
+ protected _overflowService: OverflowService;
22
24
  static readonly DEFAULT_HEADER_COUNT = 5;
23
25
  static readonly DEFAULT_HEADER_RESPONSIVITY = true;
24
26
  protected _headerColumnCount$: BehaviorSubject<number>;
@@ -31,7 +33,7 @@ export declare abstract class AbstractHeaderService implements OnDestroy {
31
33
  private _initializedCount;
32
34
  loading: LoadingEmitter;
33
35
  fieldsGroup: Array<FieldsGroup>;
34
- protected constructor(_headerType: HeaderType, _preferences: UserPreferenceService, _viewIdService: ViewIdService, _logger: LoggerService);
36
+ protected constructor(_headerType: HeaderType, _preferences: UserPreferenceService, _logger: LoggerService, _viewIdService: ViewIdService, _overflowService: OverflowService);
35
37
  /**
36
38
  * Provides Observable for all changes in header
37
39
  */
@@ -39,6 +41,7 @@ export declare abstract class AbstractHeaderService implements OnDestroy {
39
41
  get selectedHeaders$(): Observable<Array<HeaderColumn>>;
40
42
  get headerState(): HeaderStateInterface;
41
43
  get headerType(): HeaderType;
44
+ get overflowMode(): boolean;
42
45
  get headerColumnCount(): number;
43
46
  set headerColumnCount(maxColumns: number);
44
47
  get headerColumnCount$(): Observable<number>;
@@ -131,6 +134,6 @@ export declare abstract class AbstractHeaderService implements OnDestroy {
131
134
  protected abstract saveState(): any;
132
135
  protected abstract saveNewState(): any;
133
136
  protected abstract restoreLastState(): any;
134
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractHeaderService, [null, null, { optional: true; }, null]>;
137
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractHeaderService, [null, null, null, { optional: true; }, { optional: true; }]>;
135
138
  static ɵprov: i0.ɵɵInjectableDeclaration<AbstractHeaderService>;
136
139
  }
@@ -13,7 +13,7 @@ export declare abstract class AbstractHeaderComponent implements OnInit, OnDestr
13
13
  protected _translate: TranslateService;
14
14
  protected _overflowService: OverflowService;
15
15
  protected readonly DEFAULT_COLUMN_COUNT = 6;
16
- protected readonly DEFAULT_COLUMN_WIDTH = 190;
16
+ protected readonly DEFAULT_COLUMN_WIDTH = 220;
17
17
  type: HeaderType;
18
18
  hideEditMode: boolean;
19
19
  headerService: AbstractHeaderService;
@@ -6,16 +6,17 @@ import { LoggerService } from '../../logger/services/logger.service';
6
6
  import { Subscription } from 'rxjs';
7
7
  import { ViewIdService } from '../../user/services/view-id.service';
8
8
  import { AllowedNetsService } from '../../allowed-nets/services/allowed-nets.service';
9
+ import { OverflowService } from '../services/overflow.service';
9
10
  import * as i0 from "@angular/core";
10
11
  export declare class TaskHeaderService extends AbstractHeaderService implements OnDestroy {
11
12
  protected _allowedNetsService: AllowedNetsService;
12
13
  protected subAllowedNets: Subscription;
13
- constructor(_allowedNetsService: AllowedNetsService, preferences: UserPreferenceService, logger: LoggerService, viewIdService: ViewIdService, naeDefaultHeaders: Array<string>);
14
+ constructor(_allowedNetsService: AllowedNetsService, preferences: UserPreferenceService, logger: LoggerService, viewIdService: ViewIdService, overflowService: OverflowService, naeDefaultHeaders: Array<string>);
14
15
  protected createMetaHeaders(): Array<HeaderColumn>;
15
16
  protected saveState(): void;
16
17
  protected saveNewState(): void;
17
18
  protected restoreLastState(): void;
18
19
  ngOnDestroy(): void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<TaskHeaderService, [null, null, null, { optional: true; }, { optional: true; }]>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<TaskHeaderService, [null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
20
21
  static ɵprov: i0.ɵɵInjectableDeclaration<TaskHeaderService>;
21
22
  }
@@ -4,14 +4,15 @@ import { HeaderColumn } from '../models/header-column';
4
4
  import { UserPreferenceService } from '../../user/services/user-preference.service';
5
5
  import { LoggerService } from '../../logger/services/logger.service';
6
6
  import { ViewIdService } from '../../user/services/view-id.service';
7
+ import { OverflowService } from '../services/overflow.service';
7
8
  import * as i0 from "@angular/core";
8
9
  export declare class WorkflowHeaderService extends AbstractHeaderService implements OnDestroy {
9
- constructor(preferences: UserPreferenceService, viewIdService: ViewIdService, logger: LoggerService);
10
+ constructor(preferences: UserPreferenceService, logger: LoggerService, viewIdService: ViewIdService, overflowService: OverflowService);
10
11
  protected createMetaHeaders(): Array<HeaderColumn>;
11
12
  ngOnDestroy(): void;
12
13
  protected saveState(): void;
13
14
  protected saveNewState(): void;
14
15
  protected restoreLastState(): void;
15
- static ɵfac: i0.ɵɵFactoryDeclaration<WorkflowHeaderService, [null, { optional: true; }, null]>;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkflowHeaderService, [null, null, { optional: true; }, { optional: true; }]>;
16
17
  static ɵprov: i0.ɵɵInjectableDeclaration<WorkflowHeaderService>;
17
18
  }
@@ -0,0 +1,15 @@
1
+ export interface UriNodeResource {
2
+ id: string;
3
+ uriPath: string;
4
+ name: string;
5
+ parentId: string;
6
+ parent: UriNodeResource;
7
+ childrenId: Set<string>;
8
+ children: Set<UriNodeResource>;
9
+ level: number;
10
+ contentTypes: Set<UriContentType>;
11
+ }
12
+ export declare enum UriContentType {
13
+ PROCESS = 0,
14
+ CASE = 1
15
+ }
@@ -0,0 +1,138 @@
1
+ import { OnDestroy, OnInit, TemplateRef } from '@angular/core';
2
+ import { Observable, Subscription } from 'rxjs';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { BreakpointObserver } from '@angular/cdk/layout';
5
+ import { LanguageService } from '../../translate/language.service';
6
+ import { UserService } from '../../user/services/user.service';
7
+ import { LoggerService } from '../../logger/services/logger.service';
8
+ import { ConfigurationService } from '../../configuration/configuration.service';
9
+ import { UriService } from '../service/uri.service';
10
+ import { UriNodeResource } from '../model/uri-resource';
11
+ import { Case } from '../../resources/interface/case';
12
+ import { DynamicNavigationRouteProviderService } from '../../routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service';
13
+ import { LoadingEmitter } from "../../utility/loading-emitter";
14
+ import { MatDrawerMode } from "@angular/material/sidenav";
15
+ import { ResizeEvent } from "angular-resizable-element";
16
+ import { User } from "../../user/models/user";
17
+ import { RoleAccess, View } from "../../../commons/schema";
18
+ import { AccessService } from "../../authorization/permission/access.service";
19
+ import * as i0 from "@angular/core";
20
+ export interface ConfigDoubleMenu {
21
+ mode: MatDrawerMode;
22
+ opened: boolean;
23
+ disableClose: boolean;
24
+ width: number;
25
+ }
26
+ export interface ViewNavigationItem extends View {
27
+ id: string;
28
+ resource?: Case;
29
+ }
30
+ export declare const FILTER_IDENTIFIERS: string[];
31
+ export declare const FILTER_VIEW_TASK_TRANSITION_ID = "view";
32
+ export declare abstract class AbstractNavigationDoubleDrawerComponent implements OnInit, OnDestroy {
33
+ protected _router: Router;
34
+ protected _activatedRoute: ActivatedRoute;
35
+ protected _breakpoint: BreakpointObserver;
36
+ protected _languageService: LanguageService;
37
+ protected _userService: UserService;
38
+ protected _accessService: AccessService;
39
+ protected _log: LoggerService;
40
+ protected _config: ConfigurationService;
41
+ protected _uriService: UriService;
42
+ protected _dynamicRoutingService: DynamicNavigationRouteProviderService;
43
+ portalLeftMenu: TemplateRef<any>;
44
+ portalRightMenu: TemplateRef<any>;
45
+ imageRouterLink: string;
46
+ imageAlt: string;
47
+ image: string;
48
+ profileRouterLink: string;
49
+ includeUser: boolean;
50
+ includeLanguage: boolean;
51
+ includeMoreMenu: boolean;
52
+ allClosable: boolean;
53
+ folderIcon: string;
54
+ openedFolderIcon: string;
55
+ filterIcon: string;
56
+ foldersCategoryName: string;
57
+ viewsCategoryName: string;
58
+ /**
59
+ * Array of folder nodes on left side
60
+ * */
61
+ leftNodes: Array<UriNodeResource>;
62
+ /**
63
+ * Array of folder nodes on right side
64
+ * */
65
+ rightNodes: Array<UriNodeResource>;
66
+ /**
67
+ * Processes that can be displayed under folders on right side menu
68
+ * */
69
+ views: Array<ViewNavigationItem>;
70
+ moreMenuItems: Array<ViewNavigationItem>;
71
+ protected _leftNodesSubscription: Subscription;
72
+ protected _rightNodesSubscription: Subscription;
73
+ protected _filtersSubscription: Subscription;
74
+ protected _breakpointSubscription: Subscription;
75
+ protected _rootSubscription: Subscription;
76
+ protected _currentNodeSubscription: Subscription;
77
+ /**
78
+ * Currently display uri
79
+ * Siblings of the node are on the left, children are on the right
80
+ */
81
+ currentNode: UriNodeResource;
82
+ leftLoading$: LoadingEmitter;
83
+ rightLoading$: LoadingEmitter;
84
+ protected _configLeftMenu: ConfigDoubleMenu;
85
+ protected _configRightMenu: ConfigDoubleMenu;
86
+ protected _childCustomViews: {
87
+ [uri: string]: {
88
+ [key: string]: ViewNavigationItem;
89
+ };
90
+ };
91
+ protected constructor(_router: Router, _activatedRoute: ActivatedRoute, _breakpoint: BreakpointObserver, _languageService: LanguageService, _userService: UserService, _accessService: AccessService, _log: LoggerService, _config: ConfigurationService, _uriService: UriService, _dynamicRoutingService: DynamicNavigationRouteProviderService);
92
+ ngOnInit(): void;
93
+ protected resolveUriForChildViews(configPath: string, childView: View): void;
94
+ protected resolveHiddenMenuItemFromChildViews(configPath: string, childView: View): void;
95
+ ngOnDestroy(): void;
96
+ get configLeftMenu(): ConfigDoubleMenu;
97
+ get configRightMenu(): ConfigDoubleMenu;
98
+ toggleMenu(): void;
99
+ toggleLeftMenu(): void;
100
+ toggleRightMenu(): void;
101
+ protected resolveLayout(isLargeScreen: boolean): void;
102
+ getLang(): string;
103
+ logout(): void;
104
+ get user(): User;
105
+ get canGoBackLoading$(): Observable<boolean>;
106
+ /**
107
+ * On home click, the current level is set to 0, and current parent is
108
+ * set to root node.
109
+ * */
110
+ onHomeClick(): void;
111
+ /**
112
+ * On back click, the parent is set to parent of left nodes, that will solve
113
+ * the right side menu (elements that were in left side, after backward
114
+ * navigation will be on the right side).
115
+ * Current level is set to a lower number in order to set the left side menu.
116
+ * */
117
+ onBackClick(): void;
118
+ onNodeClick(node: UriNodeResource): void;
119
+ protected loadLeftSide(): void;
120
+ protected loadRightSide(): void;
121
+ protected resolveFilterCaseToViewNavigationItem(filter: Case): ViewNavigationItem | undefined;
122
+ protected resolveAccessRoles(filter: Case): Array<RoleAccess> | undefined;
123
+ protected getFilterRoutingPath(filterCase: Case): string;
124
+ protected compareStrings(a: string, b: string): number;
125
+ /**
126
+ * Function to check whether the back button should be displayed
127
+ * @returns boolean if the back button should be displayed
128
+ * */
129
+ isOnZeroLevel(): boolean;
130
+ isLeftNodesEmpty(): boolean;
131
+ isRightNodesEmpty(): boolean;
132
+ isViewsEmpty(): boolean;
133
+ uriNodeTrackBy(index: number, node: UriNodeResource): string;
134
+ viewsTrackBy(index: number, view: ViewNavigationItem): string;
135
+ onResizeEvent(event: ResizeEvent): void;
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractNavigationDoubleDrawerComponent, never>;
137
+ static ɵcmp: i0.ɵɵComponentDeclaration<AbstractNavigationDoubleDrawerComponent, "ncc-abstract-navigation-double-drawer", never, { "portalLeftMenu": "portalLeftMenu"; "portalRightMenu": "portalRightMenu"; "imageRouterLink": "imageRouterLink"; "imageAlt": "imageAlt"; "image": "image"; "profileRouterLink": "profileRouterLink"; "includeUser": "includeUser"; "includeLanguage": "includeLanguage"; "includeMoreMenu": "includeMoreMenu"; "allClosable": "allClosable"; "folderIcon": "folderIcon"; "openedFolderIcon": "openedFolderIcon"; "filterIcon": "filterIcon"; "foldersCategoryName": "foldersCategoryName"; "viewsCategoryName": "viewsCategoryName"; }, {}, never, never>;
138
+ }
@@ -7,15 +7,13 @@ import { MatTreeNestedDataSource } from '@angular/material/tree';
7
7
  import { Observable, ReplaySubject } from 'rxjs';
8
8
  import { LoggerService } from '../../logger/services/logger.service';
9
9
  import { UserService } from '../../user/services/user.service';
10
- import { RoleGuardService } from '../../authorization/role/role-guard.service';
11
- import { AuthorityGuardService } from '../../authorization/authority/authority-guard.service';
12
- import { GroupGuardService } from '../../authorization/group/group-guard.service';
13
10
  import { AbstractNavigationResizableDrawerComponent } from '../navigation-drawer/abstract-navigation-resizable-drawer.component';
14
11
  import { ActiveGroupService } from '../../groups/services/active-group.service';
15
12
  import { TaskResourceService } from '../../resources/engine-endpoint/task-resource.service';
16
13
  import { DataGroup } from '../../resources/interface/data-groups';
17
14
  import { LanguageService } from '../../translate/language.service';
18
15
  import { DynamicNavigationRouteProviderService } from '../../routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service';
16
+ import { AccessService } from "../../authorization/permission/access.service";
19
17
  import * as i0 from "@angular/core";
20
18
  export interface NavigationNode {
21
19
  name: string;
@@ -30,9 +28,7 @@ export declare abstract class AbstractNavigationTreeComponent extends AbstractNa
30
28
  protected _router: Router;
31
29
  protected _log: LoggerService;
32
30
  protected _userService: UserService;
33
- protected _roleGuard: RoleGuardService;
34
- protected _authorityGuard: AuthorityGuardService;
35
- protected _groupGuard: GroupGuardService;
31
+ protected _accessService: AccessService;
36
32
  protected _activeGroupService: ActiveGroupService;
37
33
  protected _taskResourceService: TaskResourceService;
38
34
  protected _languageService: LanguageService;
@@ -48,7 +44,7 @@ export declare abstract class AbstractNavigationTreeComponent extends AbstractNa
48
44
  private _groupNavNodesCount;
49
45
  treeControl: NestedTreeControl<NavigationNode>;
50
46
  dataSource: MatTreeNestedDataSource<NavigationNode>;
51
- protected constructor(_config: ConfigurationService, _router: Router, _log: LoggerService, _userService: UserService, _roleGuard: RoleGuardService, _authorityGuard: AuthorityGuardService, _groupGuard: GroupGuardService, _activeGroupService: ActiveGroupService, _taskResourceService: TaskResourceService, _languageService: LanguageService, _navigationRouteProvider: DynamicNavigationRouteProviderService);
47
+ protected constructor(_config: ConfigurationService, _router: Router, _log: LoggerService, _userService: UserService, _accessService: AccessService, _activeGroupService: ActiveGroupService, _taskResourceService: TaskResourceService, _languageService: LanguageService, _navigationRouteProvider: DynamicNavigationRouteProviderService);
52
48
  ngOnInit(): void;
53
49
  ngOnDestroy(): void;
54
50
  hasChild(_: number, node: NavigationNode): boolean;
@@ -83,29 +79,6 @@ export declare abstract class AbstractNavigationTreeComponent extends AbstractNa
83
79
  */
84
80
  protected appendRouteSegment(parentUrl: string, routeSegment: string): string;
85
81
  protected resolveLevels(nodes: Array<NavigationNode>, parentLevel?: number): void;
86
- /**
87
- * @param view the view whose access permissions we want to check
88
- * @param url URL to which the view maps. Is used only for error message generation
89
- * @returns whether the user can access the provided view
90
- */
91
- protected canAccessView(view: View, url: string): boolean;
92
- /**
93
- * @param view the view whose access permissions we want to check
94
- * @param url URL to which the view maps. Is used only for error message generation
95
- * @returns whether the user passes the role guard condition for accessing the specified view
96
- */
97
- protected passesRoleGuard(view: View, url: string): boolean;
98
- /**
99
- * @param view the view whose access permissions we want to check
100
- * @returns whether the user passes the authority guard condition for accessing the specified view
101
- */
102
- protected passesAuthorityGuard(view: View): boolean;
103
- /**
104
- * @param view the view whose access permissions we want to check
105
- * @param url URL to which the view maps. Is used only for error message generation
106
- * @returns whether the user passes the role guard condition for accessing the specified view
107
- */
108
- protected passesGroupGuard(view: View, url: string): boolean;
109
82
  protected resolveChange(): void;
110
83
  /**
111
84
  * @returns `true` if the layout of the provided {@link View} node's name indicates it is a
@@ -1,13 +1,17 @@
1
1
  export * from './quick-panel/public-api';
2
2
  export * from './navigation-tree/abstract-navigation-tree.component';
3
3
  export * from './navigation-drawer/abstract-navigation-drawer.component';
4
+ export * from './navigation-double-drawer/abstract-navigation-double-drawer';
4
5
  export * from './navigation-rail/abstract-navigation-rail.component';
5
6
  export * from './group-navigation-component-resolver/abstract-group-navigation-component-resolver.component';
6
7
  export * from './group-navigation-component-resolver/group-navigation-component-resolver.service';
7
8
  export * from './utility/filter-extraction.service';
9
+ export * from './service/uri.service';
10
+ export * from './service/uri-resource.service';
8
11
  export * from './model/group-navigation-constants';
9
12
  export * from './model/group-navigation-component-resolver-component-injection-token';
10
13
  export * from './model/filter-case-injection-token';
11
14
  export * from './model/group-navigation-item-label';
15
+ export * from './model/uri-resource';
12
16
  export * from './utility/navigation-item-task-utility-methods';
13
17
  export * from './group-navigation-component-resolver/group-navigation-view-id-segment-factory';
@@ -0,0 +1,18 @@
1
+ import { AbstractResourceService } from '../../resources/abstract-endpoint/abstract-resource.service';
2
+ import { ResourceProvider } from '../../resources/resource-provider.service';
3
+ import { ConfigurationService } from '../../configuration/configuration.service';
4
+ import { UriNodeResource } from '../model/uri-resource';
5
+ import { Observable } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Service for accessing backend resource to resolve URI objects
9
+ * */
10
+ export declare class UriResourceService extends AbstractResourceService {
11
+ constructor(provider: ResourceProvider, configService: ConfigurationService);
12
+ getRoot(): Observable<UriNodeResource>;
13
+ getByLevel(level: number): Observable<Array<UriNodeResource>>;
14
+ getNodesByParent(parentId: string): Observable<Array<UriNodeResource>>;
15
+ getNodeByUri(uriPath: string): Observable<UriNodeResource>;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<UriResourceService, never>;
17
+ static ɵprov: i0.ɵɵInjectableDeclaration<UriResourceService>;
18
+ }
@@ -0,0 +1,75 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { LoggerService } from '../../logger/services/logger.service';
3
+ import { UriResourceService } from './uri-resource.service';
4
+ import { Observable } from 'rxjs';
5
+ import { UriNodeResource } from '../model/uri-resource';
6
+ import { Case } from '../../resources/interface/case';
7
+ import { CaseResourceService } from '../../resources/engine-endpoint/case-resource.service';
8
+ import { ActiveGroupService } from '../../groups/services/active-group.service';
9
+ import { LoadingEmitter } from "../../utility/loading-emitter";
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * Service for managing URIs
13
+ * */
14
+ export declare class UriService implements OnDestroy {
15
+ protected _logger: LoggerService;
16
+ protected _resourceService: UriResourceService;
17
+ protected _caseResourceService: CaseResourceService;
18
+ protected _activeGroupService: ActiveGroupService;
19
+ private _rootNode;
20
+ private readonly _rootLoading$;
21
+ private readonly _parentLoading$;
22
+ private readonly _activeNode$;
23
+ constructor(_logger: LoggerService, _resourceService: UriResourceService, _caseResourceService: CaseResourceService, _activeGroupService: ActiveGroupService);
24
+ ngOnDestroy(): void;
25
+ get root(): UriNodeResource;
26
+ get rootLoaded$(): LoadingEmitter;
27
+ isRoot(node: UriNodeResource): boolean;
28
+ get activeNode(): UriNodeResource;
29
+ set activeNode(node: UriNodeResource);
30
+ get activeNode$(): Observable<UriNodeResource>;
31
+ get parentNodeLoading$(): Observable<boolean>;
32
+ /**
33
+ * Loads root ID into variable.
34
+ * When root node is loaded and active node is not set yet the root node is set as active node
35
+ * */
36
+ private loadRoot;
37
+ reset(): UriNodeResource;
38
+ /**
39
+ * Get uri node by uri path.
40
+ * @param path
41
+ */
42
+ getNodeByPath(path: string): Observable<UriNodeResource>;
43
+ /**
44
+ * Get child nodes of provides node.
45
+ * @param node parent node
46
+ */
47
+ getChildNodes(node?: UriNodeResource): Observable<Array<UriNodeResource>>;
48
+ /**
49
+ * Get cases under uri node
50
+ * @param node parent node of cases
51
+ * @param processIdentifiers optional search filter for process identifier to get only cases from the process
52
+ */
53
+ getCasesOfNode(node?: UriNodeResource, processIdentifiers?: Array<string>): Observable<Array<Case>>;
54
+ /**
55
+ * Get siblings node of the provided node
56
+ * @param node siblings node
57
+ */
58
+ getSiblingsOfNode(node?: UriNodeResource): Observable<Array<UriNodeResource>>;
59
+ /**
60
+ * Get nodes on the same uri level starting from 0. Root node is no 0 level.
61
+ * @param level
62
+ * @param parent optional parameter to filter nodes with common parent
63
+ */
64
+ getNodesOnLevel(level: number, parent?: UriNodeResource): Observable<Array<UriNodeResource>>;
65
+ resolveParentPath(node?: UriNodeResource): string;
66
+ private capitalizeNames;
67
+ /**
68
+ * /netgrif/nae_system/processes/... => Netgrif -> Nae Systems -> Processes
69
+ * @param node
70
+ * @private
71
+ */
72
+ private capitalizeName;
73
+ static ɵfac: i0.ɵɵFactoryDeclaration<UriService, never>;
74
+ static ɵprov: i0.ɵɵInjectableDeclaration<UriService>;
75
+ }
@@ -4,11 +4,14 @@ import { OnDestroy } from '@angular/core';
4
4
  import { FeaturedValue } from './featured-value';
5
5
  import { CurrencyPipe } from '@angular/common';
6
6
  import { ImmediateData } from '../../resources/interface/immediate-data';
7
+ import { OverflowService } from '../../header/services/overflow.service';
7
8
  import * as i0 from "@angular/core";
8
9
  export declare abstract class AbstractPanelWithImmediateDataComponent extends AbstractPanelWithHeaderBindingComponent implements OnDestroy {
9
10
  protected _translate: TranslateService;
10
11
  protected _currencyPipe: CurrencyPipe;
11
- protected constructor(_translate: TranslateService, _currencyPipe: CurrencyPipe);
12
+ protected _overflowService: OverflowService;
13
+ protected constructor(_translate: TranslateService, _currencyPipe: CurrencyPipe, _overflowService: OverflowService);
14
+ get overflowMode(): boolean;
12
15
  ngOnDestroy(): void;
13
16
  protected parseImmediateValue(immediate: ImmediateData): FeaturedValue;
14
17
  protected formatCurrencyPipe(value: any, code: string, fraction: number, locale: string, type: string): {
@@ -1,11 +1,16 @@
1
1
  import { AfterViewInit, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';
2
2
  import { MatExpansionPanel } from '@angular/material/expansion';
3
3
  import { CaseListFontColorService } from '../utility/service/case-list-font-color.service';
4
+ import { ActivatedRoute, Params } from '@angular/router';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare abstract class AbstractPanelComponent implements AfterViewInit, OnDestroy {
6
7
  protected _caseListFontColorService: CaseListFontColorService;
8
+ protected _activatedRoute?: ActivatedRoute;
9
+ config: Params;
7
10
  expansionDisabled: boolean;
8
11
  preventExpand: boolean;
12
+ preventCollapse: boolean;
13
+ hidePanelHeader: boolean;
9
14
  panelHeader: TemplateRef<object>;
10
15
  panelContent: TemplateRef<object>;
11
16
  first: boolean;
@@ -14,13 +19,14 @@ export declare abstract class AbstractPanelComponent implements AfterViewInit, O
14
19
  stopLoading: EventEmitter<object>;
15
20
  getExpansionPanelRef: EventEmitter<MatExpansionPanel>;
16
21
  matExpansionPanel: any;
17
- protected constructor(_caseListFontColorService: CaseListFontColorService);
22
+ protected constructor(_caseListFontColorService: CaseListFontColorService, _activatedRoute?: ActivatedRoute);
18
23
  ngOnDestroy(): void;
19
24
  ngAfterViewInit(): void;
20
25
  emitExpand(): void;
21
26
  emitCollapse(): void;
22
27
  expandPanel(): void;
28
+ showPanelHeader(): boolean;
23
29
  getCaseFontColor(): string;
24
30
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractPanelComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<AbstractPanelComponent, "ncc-abstract-panel", never, { "expansionDisabled": "expansionDisabled"; "preventExpand": "preventExpand"; "panelHeader": "panelHeader"; "panelContent": "panelContent"; "first": "first"; "last": "last"; "caseColor": "caseColor"; }, { "stopLoading": "stopLoading"; "getExpansionPanelRef": "getExpansionPanelRef"; }, never, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<AbstractPanelComponent, "ncc-abstract-panel", never, { "expansionDisabled": "expansionDisabled"; "preventExpand": "preventExpand"; "preventCollapse": "preventCollapse"; "hidePanelHeader": "hidePanelHeader"; "panelHeader": "panelHeader"; "panelContent": "panelContent"; "first": "first"; "last": "last"; "caseColor": "caseColor"; }, { "stopLoading": "stopLoading"; "getExpansionPanelRef": "getExpansionPanelRef"; }, never, never>;
26
32
  }
@@ -0,0 +1,3 @@
1
+ export declare enum ConfigParams {
2
+ PANEL_HEADER = "panelHeader"
3
+ }
@@ -8,7 +8,10 @@ export * from './abstract/tabbed-virtual-scroll.component';
8
8
  export * from './immediate/abstract-immediate-filter-text.component';
9
9
  export * from './immediate/abstract-immediate-filter-text-content.component';
10
10
  export * from './panel-item/abstract-panel-item.component';
11
+ export * from './task-panel-single/abstract-single-task.component';
11
12
  export * from './task-panel-list/task-panel-data/task-panel-data';
12
13
  export * from './task-panel/models/disable-functions';
13
14
  export * from './abstract/featured-value';
14
15
  export * from './immediate/model/filter-text-injection-token';
16
+ export * from './task-panel/models/task-panel-context';
17
+ export * from './configuration/config-params';
@@ -1,4 +1,4 @@
1
- import { AfterViewInit, EventEmitter, OnDestroy, OnInit, Type } from '@angular/core';
1
+ import { AfterViewInit, EventEmitter, OnDestroy, OnInit, TemplateRef, Type } from '@angular/core';
2
2
  import { MatExpansionPanel } from '@angular/material/expansion';
3
3
  import { ComponentPortal } from '@angular/cdk/portal';
4
4
  import { TaskContentService } from '../../task-content/services/task-content.service';
@@ -26,6 +26,8 @@ import { FeaturedValue } from '../abstract/featured-value';
26
26
  import { CurrencyPipe } from '@angular/common';
27
27
  import { PermissionService } from '../../authorization/permission/permission.service';
28
28
  import { ChangedFieldsService } from '../../changed-fields/services/changed-fields.service';
29
+ import { TaskPanelContext } from './models/task-panel-context';
30
+ import { OverflowService } from '../../header/services/overflow.service';
29
31
  import * as i0 from "@angular/core";
30
32
  export declare abstract class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent implements OnInit, AfterViewInit, OnDestroy {
31
33
  protected _taskContentService: TaskContentService;
@@ -58,6 +60,11 @@ export declare abstract class AbstractTaskPanelComponent extends AbstractPanelWi
58
60
  first: boolean;
59
61
  last: boolean;
60
62
  responsiveBody: boolean;
63
+ preventCollapse: boolean;
64
+ hidePanelHeader: boolean;
65
+ actionButtonTemplates: Array<TemplateRef<any>>;
66
+ actionRowJustifyContent: 'space-between' | 'flex-start' | 'flex-end' | 'center' | 'space-around' | 'initial' | 'start' | 'end' | 'left' | 'right' | 'revert' | 'inherit' | 'unset';
67
+ thisContext: TaskPanelContext;
61
68
  set forceLoadDataOnOpen(force: boolean);
62
69
  textEllipsis: boolean;
63
70
  /**
@@ -72,7 +79,7 @@ export declare abstract class AbstractTaskPanelComponent extends AbstractPanelWi
72
79
  protected _subTaskData: Subscription;
73
80
  protected _subPanelUpdate: Subscription;
74
81
  protected _taskDisableButtonFunctions: DisableButtonFuntions;
75
- protected constructor(_taskContentService: TaskContentService, _log: LoggerService, _taskViewService: TaskViewService, _paperView: PaperViewService, _taskEventService: TaskEventService, _assignTaskService: AssignTaskService, _delegateTaskService: DelegateTaskService, _cancelTaskService: CancelTaskService, _finishTaskService: FinishTaskService, _taskState: TaskRequestStateService, _taskDataService: TaskDataService, _assignPolicyService: AssignPolicyService, _callChain: CallChainService, _taskOperations: SubjectTaskOperations, _disableFunctions: DisableButtonFuntions, _translate: TranslateService, _currencyPipe: CurrencyPipe, _changedFieldsService: ChangedFieldsService, _permissionService: PermissionService);
82
+ protected constructor(_taskContentService: TaskContentService, _log: LoggerService, _taskViewService: TaskViewService, _paperView: PaperViewService, _taskEventService: TaskEventService, _assignTaskService: AssignTaskService, _delegateTaskService: DelegateTaskService, _cancelTaskService: CancelTaskService, _finishTaskService: FinishTaskService, _taskState: TaskRequestStateService, _taskDataService: TaskDataService, _assignPolicyService: AssignPolicyService, _callChain: CallChainService, _taskOperations: SubjectTaskOperations, _disableFunctions: DisableButtonFuntions, _translate: TranslateService, _currencyPipe: CurrencyPipe, _changedFieldsService: ChangedFieldsService, _permissionService: PermissionService, overflowService: OverflowService);
76
83
  ngOnInit(): void;
77
84
  ngAfterViewInit(): void;
78
85
  protected abstract createContentPortal(): void;
@@ -103,6 +110,6 @@ export declare abstract class AbstractTaskPanelComponent extends AbstractPanelWi
103
110
  protected getFeaturedMetaValue(selectedHeader: HeaderColumn): FeaturedValue;
104
111
  protected getFeaturedImmediateValue(selectedHeader: HeaderColumn): FeaturedValue;
105
112
  ngOnDestroy(): void;
106
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractTaskPanelComponent, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, null, null, null, null]>;
107
- static ɵcmp: i0.ɵɵComponentDeclaration<AbstractTaskPanelComponent, "ncc-abstract-legal-notice", never, { "panelContentComponent": "panelContentComponent"; "selectedHeaders$": "selectedHeaders$"; "first": "first"; "last": "last"; "responsiveBody": "responsiveBody"; "forceLoadDataOnOpen": "forceLoadDataOnOpen"; "textEllipsis": "textEllipsis"; "taskPanelData": "taskPanelData"; }, { "taskEvent": "taskEvent"; "panelRefOutput": "panelRefOutput"; }, never, never>;
113
+ static ɵfac: i0.ɵɵFactoryDeclaration<AbstractTaskPanelComponent, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, null, null, null, null, null]>;
114
+ static ɵcmp: i0.ɵɵComponentDeclaration<AbstractTaskPanelComponent, "ncc-abstract-legal-notice", never, { "panelContentComponent": "panelContentComponent"; "selectedHeaders$": "selectedHeaders$"; "first": "first"; "last": "last"; "responsiveBody": "responsiveBody"; "preventCollapse": "preventCollapse"; "hidePanelHeader": "hidePanelHeader"; "actionButtonTemplates": "actionButtonTemplates"; "actionRowJustifyContent": "actionRowJustifyContent"; "forceLoadDataOnOpen": "forceLoadDataOnOpen"; "textEllipsis": "textEllipsis"; "taskPanelData": "taskPanelData"; }, { "taskEvent": "taskEvent"; "panelRefOutput": "panelRefOutput"; }, never, never>;
108
115
  }
@@ -0,0 +1,19 @@
1
+ export interface TaskPanelContext {
2
+ canAssign: () => boolean;
3
+ assign: () => void;
4
+ getAssignTitle: () => string;
5
+ delegate: () => void;
6
+ getDelegateTitle: () => string;
7
+ canReassign: () => boolean;
8
+ canCancel: () => boolean;
9
+ cancel: () => void;
10
+ getCancelTitle: () => string;
11
+ canFinish: () => boolean;
12
+ finish: () => void;
13
+ getFinishTitle: () => string;
14
+ canCollapse: () => boolean;
15
+ collapse: () => void;
16
+ canDisable: (arg: string) => boolean;
17
+ canDo: (arg: string) => boolean;
18
+ isLoading: () => boolean;
19
+ }