@flusys/ng-shared 9.1.0 → 9.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -2
- package/fesm2022/flusys-ng-shared.mjs +7017 -3772
- package/fesm2022/flusys-ng-shared.mjs.map +1 -1
- package/package.json +3 -3
- package/types/flusys-ng-shared.d.ts +1943 -1275
|
@@ -1,355 +1,347 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import { DestroyRef, ElementRef, InjectionToken, Injector, OnDestroy, PipeTransform, ResourceRef, ResourceStatus, Signal, TemplateRef, model } from "@angular/core";
|
|
4
|
+
import { HttpClient, HttpContextToken, HttpEvent, HttpHandlerFn, HttpHeaders, HttpParams, HttpRequest } from "@angular/common/http";
|
|
5
|
+
import { CanActivateFn, ResolveFn } from "@angular/router";
|
|
6
|
+
import { ServiceName } from "@flusys/ng-core";
|
|
7
|
+
import { ControlValueAccessor } from "@angular/forms";
|
|
8
|
+
import { FormValueControl } from "@angular/forms/signals";
|
|
9
|
+
import { CheckboxChangeEvent, TreeNode } from "@flusys/ng-ui";
|
|
10
|
+
export declare const SHARED_MESSAGES: Record<string, string>;
|
|
11
|
+
export declare const USER_PERMISSIONS: {
|
|
12
|
+
readonly CREATE: "user.create";
|
|
13
|
+
readonly READ: "user.read";
|
|
14
|
+
readonly UPDATE: "user.update";
|
|
15
|
+
readonly DELETE: "user.delete";
|
|
16
|
+
readonly LOOKUP: "user.lookup";
|
|
17
|
+
};
|
|
18
|
+
export declare const COMPANY_PERMISSIONS: {
|
|
19
|
+
readonly CREATE: "company.create";
|
|
20
|
+
readonly READ: "company.read";
|
|
21
|
+
readonly UPDATE: "company.update";
|
|
22
|
+
readonly DELETE: "company.delete";
|
|
23
|
+
};
|
|
24
|
+
export declare const BRANCH_PERMISSIONS: {
|
|
25
|
+
readonly CREATE: "branch.create";
|
|
26
|
+
readonly READ: "branch.read";
|
|
27
|
+
readonly UPDATE: "branch.update";
|
|
28
|
+
readonly DELETE: "branch.delete";
|
|
29
|
+
};
|
|
30
|
+
export declare const SOCIAL_AUTH_CONFIG_PERMISSIONS: {
|
|
31
|
+
readonly CREATE: "social-config.create";
|
|
32
|
+
readonly READ: "social-config.read";
|
|
33
|
+
readonly UPDATE: "social-config.update";
|
|
34
|
+
readonly DELETE: "social-config.delete";
|
|
35
|
+
};
|
|
36
|
+
export declare const ACTION_PERMISSIONS: {
|
|
37
|
+
readonly CREATE: "action.create";
|
|
38
|
+
readonly READ: "action.read";
|
|
39
|
+
readonly UPDATE: "action.update";
|
|
40
|
+
readonly DELETE: "action.delete";
|
|
41
|
+
};
|
|
42
|
+
export declare const ROLE_PERMISSIONS: {
|
|
43
|
+
readonly CREATE: "role.create";
|
|
44
|
+
readonly READ: "role.read";
|
|
45
|
+
readonly UPDATE: "role.update";
|
|
46
|
+
readonly DELETE: "role.delete";
|
|
47
|
+
};
|
|
48
|
+
export declare const ROLE_ACTION_PERMISSIONS: {
|
|
49
|
+
readonly READ: "role-action.read";
|
|
50
|
+
readonly ASSIGN: "role-action.assign";
|
|
51
|
+
};
|
|
52
|
+
export declare const USER_ROLE_PERMISSIONS: {
|
|
53
|
+
readonly READ: "user-role.read";
|
|
54
|
+
readonly ASSIGN: "user-role.assign";
|
|
55
|
+
};
|
|
56
|
+
export declare const USER_ACTION_PERMISSIONS: {
|
|
57
|
+
readonly READ: "user-action.read";
|
|
58
|
+
readonly ASSIGN: "user-action.assign";
|
|
59
|
+
};
|
|
60
|
+
export declare const COMPANY_ACTION_PERMISSIONS: {
|
|
61
|
+
readonly READ: "company-action.read";
|
|
62
|
+
readonly ASSIGN: "company-action.assign";
|
|
63
|
+
};
|
|
64
|
+
export declare const FILE_PERMISSIONS: {
|
|
65
|
+
readonly CREATE: "file.create";
|
|
66
|
+
readonly READ: "file.read";
|
|
67
|
+
readonly UPDATE: "file.update";
|
|
68
|
+
readonly DELETE: "file.delete";
|
|
69
|
+
};
|
|
70
|
+
export declare const FOLDER_PERMISSIONS: {
|
|
71
|
+
readonly CREATE: "folder.create";
|
|
72
|
+
readonly READ: "folder.read";
|
|
73
|
+
readonly UPDATE: "folder.update";
|
|
74
|
+
readonly DELETE: "folder.delete";
|
|
75
|
+
};
|
|
76
|
+
export declare const STORAGE_CONFIG_PERMISSIONS: {
|
|
77
|
+
readonly CREATE: "storage-config.create";
|
|
78
|
+
readonly READ: "storage-config.read";
|
|
79
|
+
readonly UPDATE: "storage-config.update";
|
|
80
|
+
readonly DELETE: "storage-config.delete";
|
|
81
|
+
};
|
|
82
|
+
export declare const UPLOAD_CONFIG_PERMISSIONS: {
|
|
83
|
+
readonly DELETE: "upload-config.delete";
|
|
84
|
+
};
|
|
85
|
+
export declare const EMAIL_CONFIG_PERMISSIONS: {
|
|
86
|
+
readonly CREATE: "email-config.create";
|
|
87
|
+
readonly READ: "email-config.read";
|
|
88
|
+
readonly UPDATE: "email-config.update";
|
|
89
|
+
readonly DELETE: "email-config.delete";
|
|
90
|
+
};
|
|
91
|
+
export declare const EMAIL_TEMPLATE_PERMISSIONS: {
|
|
92
|
+
readonly CREATE: "email-template.create";
|
|
93
|
+
readonly READ: "email-template.read";
|
|
94
|
+
readonly UPDATE: "email-template.update";
|
|
95
|
+
readonly DELETE: "email-template.delete";
|
|
96
|
+
};
|
|
97
|
+
export declare const FORM_PERMISSIONS: {
|
|
98
|
+
readonly CREATE: "form.create";
|
|
99
|
+
readonly READ: "form.read";
|
|
100
|
+
readonly UPDATE: "form.update";
|
|
101
|
+
readonly DELETE: "form.delete";
|
|
102
|
+
};
|
|
103
|
+
export declare const FORM_RESULT_PERMISSIONS: {
|
|
104
|
+
readonly CREATE: "form-result.create";
|
|
105
|
+
readonly READ: "form-result.read";
|
|
106
|
+
readonly UPDATE: "form-result.update";
|
|
107
|
+
readonly DELETE: "form-result.delete";
|
|
108
|
+
};
|
|
109
|
+
export declare const ENTITY_DEFINITION_PERMISSIONS: {
|
|
110
|
+
readonly CREATE: "entity_builder.entity_definition.create";
|
|
111
|
+
readonly READ: "entity_builder.entity_definition.read";
|
|
112
|
+
readonly UPDATE: "entity_builder.entity_definition.update";
|
|
113
|
+
readonly DELETE: "entity_builder.entity_definition.delete";
|
|
114
|
+
};
|
|
115
|
+
export declare const FIELD_DEFINITION_PERMISSIONS: {
|
|
116
|
+
readonly READ: "entity_builder.field_definition.read";
|
|
117
|
+
readonly UPDATE: "entity_builder.field_definition.update";
|
|
118
|
+
};
|
|
119
|
+
export declare const FLOW_DEFINITION_PERMISSIONS: {
|
|
120
|
+
readonly CREATE: "entity_builder.flow_definition.create";
|
|
121
|
+
readonly READ: "entity_builder.flow_definition.read";
|
|
122
|
+
readonly UPDATE: "entity_builder.flow_definition.update";
|
|
123
|
+
readonly DELETE: "entity_builder.flow_definition.delete";
|
|
124
|
+
readonly TEST: "entity_builder.flow_definition.test";
|
|
125
|
+
/** Needed to save a flow containing a code node (sandboxed JavaScript). */
|
|
126
|
+
readonly CODE: "entity_builder.flow_definition.code";
|
|
127
|
+
};
|
|
128
|
+
export declare const EVENT_PERMISSIONS: {
|
|
129
|
+
readonly CREATE: "event.create";
|
|
130
|
+
readonly READ: "event.read";
|
|
131
|
+
readonly UPDATE: "event.update";
|
|
132
|
+
readonly DELETE: "event.delete";
|
|
133
|
+
};
|
|
134
|
+
export declare const NOTIFICATION_PERMISSIONS: {
|
|
135
|
+
readonly CREATE: "notification.create";
|
|
136
|
+
readonly READ: "notification.read";
|
|
137
|
+
readonly UPDATE: "notification.update";
|
|
138
|
+
readonly DELETE: "notification.delete";
|
|
139
|
+
};
|
|
140
|
+
export declare const LANGUAGE_PERMISSIONS: {
|
|
141
|
+
readonly CREATE: "language.create";
|
|
142
|
+
readonly READ: "language.read";
|
|
143
|
+
readonly UPDATE: "language.update";
|
|
144
|
+
readonly DELETE: "language.delete";
|
|
145
|
+
};
|
|
146
|
+
export declare const TRANSLATION_KEY_PERMISSIONS: {
|
|
147
|
+
readonly CREATE: "translation-key.create";
|
|
148
|
+
readonly READ: "translation-key.read";
|
|
149
|
+
readonly UPDATE: "translation-key.update";
|
|
150
|
+
readonly DELETE: "translation-key.delete";
|
|
151
|
+
};
|
|
152
|
+
export declare const TRANSLATION_PERMISSIONS: {
|
|
153
|
+
readonly CREATE: "translation.create";
|
|
154
|
+
readonly READ: "translation.read";
|
|
155
|
+
readonly UPDATE: "translation.update";
|
|
156
|
+
readonly DELETE: "translation.delete";
|
|
157
|
+
};
|
|
158
|
+
export declare const PERMISSIONS: {
|
|
159
|
+
readonly USER: {
|
|
17
160
|
readonly CREATE: "user.create";
|
|
18
161
|
readonly READ: "user.read";
|
|
19
162
|
readonly UPDATE: "user.update";
|
|
20
163
|
readonly DELETE: "user.delete";
|
|
21
164
|
readonly LOOKUP: "user.lookup";
|
|
22
|
-
};
|
|
23
|
-
|
|
165
|
+
};
|
|
166
|
+
readonly COMPANY: {
|
|
24
167
|
readonly CREATE: "company.create";
|
|
25
168
|
readonly READ: "company.read";
|
|
26
169
|
readonly UPDATE: "company.update";
|
|
27
170
|
readonly DELETE: "company.delete";
|
|
28
|
-
};
|
|
29
|
-
|
|
171
|
+
};
|
|
172
|
+
readonly BRANCH: {
|
|
30
173
|
readonly CREATE: "branch.create";
|
|
31
174
|
readonly READ: "branch.read";
|
|
32
175
|
readonly UPDATE: "branch.update";
|
|
33
176
|
readonly DELETE: "branch.delete";
|
|
34
|
-
};
|
|
35
|
-
|
|
177
|
+
};
|
|
178
|
+
readonly SOCIAL_AUTH_CONFIG: {
|
|
36
179
|
readonly CREATE: "social-config.create";
|
|
37
180
|
readonly READ: "social-config.read";
|
|
38
181
|
readonly UPDATE: "social-config.update";
|
|
39
182
|
readonly DELETE: "social-config.delete";
|
|
40
|
-
};
|
|
41
|
-
|
|
183
|
+
};
|
|
184
|
+
readonly ACTION: {
|
|
42
185
|
readonly CREATE: "action.create";
|
|
43
186
|
readonly READ: "action.read";
|
|
44
187
|
readonly UPDATE: "action.update";
|
|
45
188
|
readonly DELETE: "action.delete";
|
|
46
|
-
};
|
|
47
|
-
|
|
189
|
+
};
|
|
190
|
+
readonly ROLE: {
|
|
48
191
|
readonly CREATE: "role.create";
|
|
49
192
|
readonly READ: "role.read";
|
|
50
193
|
readonly UPDATE: "role.update";
|
|
51
194
|
readonly DELETE: "role.delete";
|
|
52
|
-
};
|
|
53
|
-
|
|
195
|
+
};
|
|
196
|
+
readonly ROLE_ACTION: {
|
|
54
197
|
readonly READ: "role-action.read";
|
|
55
198
|
readonly ASSIGN: "role-action.assign";
|
|
56
|
-
};
|
|
57
|
-
|
|
199
|
+
};
|
|
200
|
+
readonly USER_ROLE: {
|
|
58
201
|
readonly READ: "user-role.read";
|
|
59
202
|
readonly ASSIGN: "user-role.assign";
|
|
60
|
-
};
|
|
61
|
-
|
|
203
|
+
};
|
|
204
|
+
readonly USER_ACTION: {
|
|
62
205
|
readonly READ: "user-action.read";
|
|
63
206
|
readonly ASSIGN: "user-action.assign";
|
|
64
|
-
};
|
|
65
|
-
|
|
207
|
+
};
|
|
208
|
+
readonly COMPANY_ACTION: {
|
|
66
209
|
readonly READ: "company-action.read";
|
|
67
210
|
readonly ASSIGN: "company-action.assign";
|
|
68
|
-
};
|
|
69
|
-
|
|
211
|
+
};
|
|
212
|
+
readonly FILE: {
|
|
70
213
|
readonly CREATE: "file.create";
|
|
71
214
|
readonly READ: "file.read";
|
|
72
215
|
readonly UPDATE: "file.update";
|
|
73
216
|
readonly DELETE: "file.delete";
|
|
74
|
-
};
|
|
75
|
-
|
|
217
|
+
};
|
|
218
|
+
readonly FOLDER: {
|
|
76
219
|
readonly CREATE: "folder.create";
|
|
77
220
|
readonly READ: "folder.read";
|
|
78
221
|
readonly UPDATE: "folder.update";
|
|
79
222
|
readonly DELETE: "folder.delete";
|
|
80
|
-
};
|
|
81
|
-
|
|
223
|
+
};
|
|
224
|
+
readonly STORAGE_CONFIG: {
|
|
82
225
|
readonly CREATE: "storage-config.create";
|
|
83
226
|
readonly READ: "storage-config.read";
|
|
84
227
|
readonly UPDATE: "storage-config.update";
|
|
85
228
|
readonly DELETE: "storage-config.delete";
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
readonly DELETE: "upload-config.delete";
|
|
89
|
-
};
|
|
90
|
-
declare const EMAIL_CONFIG_PERMISSIONS: {
|
|
229
|
+
};
|
|
230
|
+
readonly EMAIL_CONFIG: {
|
|
91
231
|
readonly CREATE: "email-config.create";
|
|
92
232
|
readonly READ: "email-config.read";
|
|
93
233
|
readonly UPDATE: "email-config.update";
|
|
94
234
|
readonly DELETE: "email-config.delete";
|
|
95
|
-
};
|
|
96
|
-
|
|
235
|
+
};
|
|
236
|
+
readonly EMAIL_TEMPLATE: {
|
|
97
237
|
readonly CREATE: "email-template.create";
|
|
98
238
|
readonly READ: "email-template.read";
|
|
99
239
|
readonly UPDATE: "email-template.update";
|
|
100
240
|
readonly DELETE: "email-template.delete";
|
|
101
|
-
};
|
|
102
|
-
|
|
241
|
+
};
|
|
242
|
+
readonly FORM: {
|
|
103
243
|
readonly CREATE: "form.create";
|
|
104
244
|
readonly READ: "form.read";
|
|
105
245
|
readonly UPDATE: "form.update";
|
|
106
246
|
readonly DELETE: "form.delete";
|
|
107
|
-
};
|
|
108
|
-
|
|
247
|
+
};
|
|
248
|
+
readonly FORM_RESULT: {
|
|
109
249
|
readonly CREATE: "form-result.create";
|
|
110
250
|
readonly READ: "form-result.read";
|
|
111
251
|
readonly UPDATE: "form-result.update";
|
|
112
252
|
readonly DELETE: "form-result.delete";
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
readonly CREATE: "entity_builder.entity_definition.create";
|
|
116
|
-
readonly READ: "entity_builder.entity_definition.read";
|
|
117
|
-
readonly UPDATE: "entity_builder.entity_definition.update";
|
|
118
|
-
readonly DELETE: "entity_builder.entity_definition.delete";
|
|
119
|
-
};
|
|
120
|
-
declare const FIELD_DEFINITION_PERMISSIONS: {
|
|
121
|
-
readonly READ: "entity_builder.field_definition.read";
|
|
122
|
-
readonly UPDATE: "entity_builder.field_definition.update";
|
|
123
|
-
};
|
|
124
|
-
declare const FLOW_DEFINITION_PERMISSIONS: {
|
|
125
|
-
readonly CREATE: "entity_builder.flow_definition.create";
|
|
126
|
-
readonly READ: "entity_builder.flow_definition.read";
|
|
127
|
-
readonly UPDATE: "entity_builder.flow_definition.update";
|
|
128
|
-
readonly DELETE: "entity_builder.flow_definition.delete";
|
|
129
|
-
readonly TEST: "entity_builder.flow_definition.test";
|
|
130
|
-
/** Needed to save a flow that runs as the system (bypassing per-entity permissions). */
|
|
131
|
-
readonly SYSTEM: "entity_builder.flow_definition.system";
|
|
132
|
-
/** Needed to save a flow containing a code node (sandboxed JavaScript). */
|
|
133
|
-
readonly CODE: "entity_builder.flow_definition.code";
|
|
134
|
-
};
|
|
135
|
-
declare const EVENT_PERMISSIONS: {
|
|
253
|
+
};
|
|
254
|
+
readonly EVENT: {
|
|
136
255
|
readonly CREATE: "event.create";
|
|
137
256
|
readonly READ: "event.read";
|
|
138
257
|
readonly UPDATE: "event.update";
|
|
139
258
|
readonly DELETE: "event.delete";
|
|
140
|
-
};
|
|
141
|
-
|
|
259
|
+
};
|
|
260
|
+
readonly NOTIFICATION: {
|
|
142
261
|
readonly CREATE: "notification.create";
|
|
143
262
|
readonly READ: "notification.read";
|
|
144
263
|
readonly UPDATE: "notification.update";
|
|
145
264
|
readonly DELETE: "notification.delete";
|
|
146
|
-
};
|
|
147
|
-
|
|
265
|
+
};
|
|
266
|
+
readonly LANGUAGE: {
|
|
148
267
|
readonly CREATE: "language.create";
|
|
149
268
|
readonly READ: "language.read";
|
|
150
269
|
readonly UPDATE: "language.update";
|
|
151
270
|
readonly DELETE: "language.delete";
|
|
152
|
-
};
|
|
153
|
-
|
|
271
|
+
};
|
|
272
|
+
readonly TRANSLATION_KEY: {
|
|
154
273
|
readonly CREATE: "translation-key.create";
|
|
155
274
|
readonly READ: "translation-key.read";
|
|
156
275
|
readonly UPDATE: "translation-key.update";
|
|
157
276
|
readonly DELETE: "translation-key.delete";
|
|
158
|
-
};
|
|
159
|
-
|
|
277
|
+
};
|
|
278
|
+
readonly TRANSLATION: {
|
|
160
279
|
readonly CREATE: "translation.create";
|
|
161
280
|
readonly READ: "translation.read";
|
|
162
281
|
readonly UPDATE: "translation.update";
|
|
163
282
|
readonly DELETE: "translation.delete";
|
|
283
|
+
};
|
|
164
284
|
};
|
|
165
|
-
|
|
166
|
-
readonly USER: {
|
|
167
|
-
readonly CREATE: "user.create";
|
|
168
|
-
readonly READ: "user.read";
|
|
169
|
-
readonly UPDATE: "user.update";
|
|
170
|
-
readonly DELETE: "user.delete";
|
|
171
|
-
readonly LOOKUP: "user.lookup";
|
|
172
|
-
};
|
|
173
|
-
readonly COMPANY: {
|
|
174
|
-
readonly CREATE: "company.create";
|
|
175
|
-
readonly READ: "company.read";
|
|
176
|
-
readonly UPDATE: "company.update";
|
|
177
|
-
readonly DELETE: "company.delete";
|
|
178
|
-
};
|
|
179
|
-
readonly BRANCH: {
|
|
180
|
-
readonly CREATE: "branch.create";
|
|
181
|
-
readonly READ: "branch.read";
|
|
182
|
-
readonly UPDATE: "branch.update";
|
|
183
|
-
readonly DELETE: "branch.delete";
|
|
184
|
-
};
|
|
185
|
-
readonly SOCIAL_AUTH_CONFIG: {
|
|
186
|
-
readonly CREATE: "social-config.create";
|
|
187
|
-
readonly READ: "social-config.read";
|
|
188
|
-
readonly UPDATE: "social-config.update";
|
|
189
|
-
readonly DELETE: "social-config.delete";
|
|
190
|
-
};
|
|
191
|
-
readonly ACTION: {
|
|
192
|
-
readonly CREATE: "action.create";
|
|
193
|
-
readonly READ: "action.read";
|
|
194
|
-
readonly UPDATE: "action.update";
|
|
195
|
-
readonly DELETE: "action.delete";
|
|
196
|
-
};
|
|
197
|
-
readonly ROLE: {
|
|
198
|
-
readonly CREATE: "role.create";
|
|
199
|
-
readonly READ: "role.read";
|
|
200
|
-
readonly UPDATE: "role.update";
|
|
201
|
-
readonly DELETE: "role.delete";
|
|
202
|
-
};
|
|
203
|
-
readonly ROLE_ACTION: {
|
|
204
|
-
readonly READ: "role-action.read";
|
|
205
|
-
readonly ASSIGN: "role-action.assign";
|
|
206
|
-
};
|
|
207
|
-
readonly USER_ROLE: {
|
|
208
|
-
readonly READ: "user-role.read";
|
|
209
|
-
readonly ASSIGN: "user-role.assign";
|
|
210
|
-
};
|
|
211
|
-
readonly USER_ACTION: {
|
|
212
|
-
readonly READ: "user-action.read";
|
|
213
|
-
readonly ASSIGN: "user-action.assign";
|
|
214
|
-
};
|
|
215
|
-
readonly COMPANY_ACTION: {
|
|
216
|
-
readonly READ: "company-action.read";
|
|
217
|
-
readonly ASSIGN: "company-action.assign";
|
|
218
|
-
};
|
|
219
|
-
readonly FILE: {
|
|
220
|
-
readonly CREATE: "file.create";
|
|
221
|
-
readonly READ: "file.read";
|
|
222
|
-
readonly UPDATE: "file.update";
|
|
223
|
-
readonly DELETE: "file.delete";
|
|
224
|
-
};
|
|
225
|
-
readonly FOLDER: {
|
|
226
|
-
readonly CREATE: "folder.create";
|
|
227
|
-
readonly READ: "folder.read";
|
|
228
|
-
readonly UPDATE: "folder.update";
|
|
229
|
-
readonly DELETE: "folder.delete";
|
|
230
|
-
};
|
|
231
|
-
readonly STORAGE_CONFIG: {
|
|
232
|
-
readonly CREATE: "storage-config.create";
|
|
233
|
-
readonly READ: "storage-config.read";
|
|
234
|
-
readonly UPDATE: "storage-config.update";
|
|
235
|
-
readonly DELETE: "storage-config.delete";
|
|
236
|
-
};
|
|
237
|
-
readonly EMAIL_CONFIG: {
|
|
238
|
-
readonly CREATE: "email-config.create";
|
|
239
|
-
readonly READ: "email-config.read";
|
|
240
|
-
readonly UPDATE: "email-config.update";
|
|
241
|
-
readonly DELETE: "email-config.delete";
|
|
242
|
-
};
|
|
243
|
-
readonly EMAIL_TEMPLATE: {
|
|
244
|
-
readonly CREATE: "email-template.create";
|
|
245
|
-
readonly READ: "email-template.read";
|
|
246
|
-
readonly UPDATE: "email-template.update";
|
|
247
|
-
readonly DELETE: "email-template.delete";
|
|
248
|
-
};
|
|
249
|
-
readonly FORM: {
|
|
250
|
-
readonly CREATE: "form.create";
|
|
251
|
-
readonly READ: "form.read";
|
|
252
|
-
readonly UPDATE: "form.update";
|
|
253
|
-
readonly DELETE: "form.delete";
|
|
254
|
-
};
|
|
255
|
-
readonly FORM_RESULT: {
|
|
256
|
-
readonly CREATE: "form-result.create";
|
|
257
|
-
readonly READ: "form-result.read";
|
|
258
|
-
readonly UPDATE: "form-result.update";
|
|
259
|
-
readonly DELETE: "form-result.delete";
|
|
260
|
-
};
|
|
261
|
-
readonly EVENT: {
|
|
262
|
-
readonly CREATE: "event.create";
|
|
263
|
-
readonly READ: "event.read";
|
|
264
|
-
readonly UPDATE: "event.update";
|
|
265
|
-
readonly DELETE: "event.delete";
|
|
266
|
-
};
|
|
267
|
-
readonly NOTIFICATION: {
|
|
268
|
-
readonly CREATE: "notification.create";
|
|
269
|
-
readonly READ: "notification.read";
|
|
270
|
-
readonly UPDATE: "notification.update";
|
|
271
|
-
readonly DELETE: "notification.delete";
|
|
272
|
-
};
|
|
273
|
-
readonly LANGUAGE: {
|
|
274
|
-
readonly CREATE: "language.create";
|
|
275
|
-
readonly READ: "language.read";
|
|
276
|
-
readonly UPDATE: "language.update";
|
|
277
|
-
readonly DELETE: "language.delete";
|
|
278
|
-
};
|
|
279
|
-
readonly TRANSLATION_KEY: {
|
|
280
|
-
readonly CREATE: "translation-key.create";
|
|
281
|
-
readonly READ: "translation-key.read";
|
|
282
|
-
readonly UPDATE: "translation-key.update";
|
|
283
|
-
readonly DELETE: "translation-key.delete";
|
|
284
|
-
};
|
|
285
|
-
readonly TRANSLATION: {
|
|
286
|
-
readonly CREATE: "translation.create";
|
|
287
|
-
readonly READ: "translation.read";
|
|
288
|
-
readonly UPDATE: "translation.update";
|
|
289
|
-
readonly DELETE: "translation.delete";
|
|
290
|
-
};
|
|
291
|
-
};
|
|
292
|
-
type PermissionCode = (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];
|
|
293
|
-
|
|
285
|
+
export type PermissionCode = (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];
|
|
294
286
|
/**
|
|
295
287
|
* Base entity interface - matches backend Identity entity
|
|
296
288
|
*/
|
|
297
|
-
interface IBaseEntity {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
289
|
+
export interface IBaseEntity {
|
|
290
|
+
id: string;
|
|
291
|
+
createdAt: Date;
|
|
292
|
+
updatedAt: Date;
|
|
293
|
+
deletedAt?: Date | null;
|
|
294
|
+
createdById?: string | null;
|
|
295
|
+
updatedById?: string | null;
|
|
296
|
+
deletedById?: string | null;
|
|
305
297
|
}
|
|
306
298
|
/**
|
|
307
299
|
* Soft deletable entity mixin
|
|
308
300
|
*/
|
|
309
|
-
interface ISoftDeletable {
|
|
310
|
-
|
|
301
|
+
export interface ISoftDeletable {
|
|
302
|
+
deletedAt?: Date | null;
|
|
311
303
|
}
|
|
312
304
|
/**
|
|
313
305
|
* Timestampable entity mixin
|
|
314
306
|
*/
|
|
315
|
-
interface ITimestampable {
|
|
316
|
-
|
|
317
|
-
|
|
307
|
+
export interface ITimestampable {
|
|
308
|
+
createdAt: Date;
|
|
309
|
+
updatedAt: Date;
|
|
318
310
|
}
|
|
319
311
|
/**
|
|
320
312
|
* Entity with active status
|
|
321
313
|
*/
|
|
322
|
-
interface IActivatable {
|
|
323
|
-
|
|
314
|
+
export interface IActivatable {
|
|
315
|
+
isActive: boolean;
|
|
324
316
|
}
|
|
325
317
|
/**
|
|
326
318
|
* Entity with ordering/serial
|
|
327
319
|
*/
|
|
328
|
-
interface IOrderable {
|
|
329
|
-
|
|
320
|
+
export interface IOrderable {
|
|
321
|
+
serial?: number | null;
|
|
330
322
|
}
|
|
331
323
|
/**
|
|
332
324
|
* Logged-in user info - matches backend ILoggedUserInfo
|
|
333
325
|
*/
|
|
334
|
-
interface ILoggedUserInfo {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
326
|
+
export interface ILoggedUserInfo {
|
|
327
|
+
id: string;
|
|
328
|
+
email: string;
|
|
329
|
+
name?: string;
|
|
330
|
+
phone?: string;
|
|
331
|
+
profilePictureId?: string;
|
|
332
|
+
companyId?: string;
|
|
333
|
+
branchId?: string;
|
|
334
|
+
companyLogoId?: string;
|
|
335
|
+
branchLogoId?: string;
|
|
344
336
|
}
|
|
345
337
|
/**
|
|
346
338
|
* Simple dropdown item for select components
|
|
347
339
|
*/
|
|
348
|
-
interface IDropDown {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
340
|
+
export interface IDropDown {
|
|
341
|
+
label: string;
|
|
342
|
+
value: string;
|
|
343
|
+
/** Optional secondary line rendered below the label (e.g. email under a user's name) when two options share a label. */
|
|
344
|
+
subLabel?: string;
|
|
353
345
|
}
|
|
354
346
|
/**
|
|
355
347
|
* Delete operation types
|
|
@@ -357,435 +349,432 @@ interface IDropDown {
|
|
|
357
349
|
* - 'restore': Restore soft-deleted item (clears deletedAt)
|
|
358
350
|
* - 'permanent': Permanently delete from database
|
|
359
351
|
*/
|
|
360
|
-
type DeleteType = 'delete' | 'restore' | 'permanent';
|
|
352
|
+
export type DeleteType = 'delete' | 'restore' | 'permanent';
|
|
361
353
|
/**
|
|
362
354
|
* Delete request payload - matches backend DeleteDto
|
|
363
355
|
*/
|
|
364
|
-
interface IDeleteData {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
356
|
+
export interface IDeleteData {
|
|
357
|
+
/** Single ID or array of IDs to delete */
|
|
358
|
+
id: string | string[];
|
|
359
|
+
/** Type of delete operation */
|
|
360
|
+
type: DeleteType;
|
|
369
361
|
}
|
|
370
362
|
/** Action node - checks a single permission */
|
|
371
|
-
interface IActionNode {
|
|
372
|
-
|
|
373
|
-
|
|
363
|
+
export interface IActionNode {
|
|
364
|
+
type: 'action';
|
|
365
|
+
actionId: string;
|
|
374
366
|
}
|
|
375
367
|
/** Group node - combines children with AND/OR logic */
|
|
376
|
-
interface IGroupNode {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
368
|
+
export interface IGroupNode {
|
|
369
|
+
type: 'group';
|
|
370
|
+
operator: 'AND' | 'OR';
|
|
371
|
+
children: ILogicNode[];
|
|
380
372
|
}
|
|
381
373
|
/** Permission logic tree (discriminated union of action/group) */
|
|
382
|
-
type ILogicNode = IActionNode | IGroupNode;
|
|
383
|
-
|
|
374
|
+
export type ILogicNode = IActionNode | IGroupNode;
|
|
384
375
|
/**
|
|
385
376
|
* Request metadata added by backend ResponseMetaInterceptor
|
|
386
377
|
*/
|
|
387
|
-
interface IRequestMeta {
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
378
|
+
export interface IRequestMeta {
|
|
379
|
+
requestId?: string;
|
|
380
|
+
timestamp?: string;
|
|
381
|
+
responseTime?: number;
|
|
391
382
|
}
|
|
392
383
|
/**
|
|
393
384
|
* Pagination metadata for list responses
|
|
394
385
|
*/
|
|
395
|
-
interface IPaginationMeta {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
386
|
+
export interface IPaginationMeta {
|
|
387
|
+
total: number;
|
|
388
|
+
page: number;
|
|
389
|
+
pageSize: number;
|
|
390
|
+
count: number;
|
|
391
|
+
hasMore?: boolean;
|
|
392
|
+
totalPages?: number;
|
|
402
393
|
}
|
|
403
394
|
/**
|
|
404
395
|
* Bulk operation metadata
|
|
405
396
|
*/
|
|
406
|
-
interface IBulkMeta {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
397
|
+
export interface IBulkMeta {
|
|
398
|
+
count: number;
|
|
399
|
+
failed?: number;
|
|
400
|
+
total?: number;
|
|
410
401
|
}
|
|
411
402
|
/**
|
|
412
403
|
* Single item response (insert, update, get-by-id)
|
|
413
404
|
*/
|
|
414
|
-
interface ISingleResponse<T> {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
405
|
+
export interface ISingleResponse<T> {
|
|
406
|
+
success: boolean;
|
|
407
|
+
message: string;
|
|
408
|
+
messageKey?: string;
|
|
409
|
+
messageVariables?: Record<string, unknown>;
|
|
410
|
+
data?: T;
|
|
411
|
+
_meta?: IRequestMeta;
|
|
421
412
|
}
|
|
422
413
|
/**
|
|
423
414
|
* List response with pagination (get-all)
|
|
424
415
|
*/
|
|
425
|
-
interface IListResponse<T> {
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
416
|
+
export interface IListResponse<T> {
|
|
417
|
+
success: boolean;
|
|
418
|
+
message: string;
|
|
419
|
+
messageKey?: string;
|
|
420
|
+
messageVariables?: Record<string, unknown>;
|
|
421
|
+
data?: T[];
|
|
422
|
+
meta: IPaginationMeta;
|
|
423
|
+
_meta?: IRequestMeta;
|
|
433
424
|
}
|
|
434
425
|
/**
|
|
435
426
|
* Bulk operation response (insert-many, update-many)
|
|
436
427
|
*/
|
|
437
|
-
interface IBulkResponse<T> {
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
428
|
+
export interface IBulkResponse<T> {
|
|
429
|
+
success: boolean;
|
|
430
|
+
message: string;
|
|
431
|
+
messageKey?: string;
|
|
432
|
+
messageVariables?: Record<string, unknown>;
|
|
433
|
+
data?: T[];
|
|
434
|
+
meta: IBulkMeta;
|
|
435
|
+
_meta?: IRequestMeta;
|
|
445
436
|
}
|
|
446
437
|
/**
|
|
447
438
|
* Message-only response (delete, logout, status updates)
|
|
448
439
|
*/
|
|
449
|
-
interface IMessageResponse {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
type
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
readonly ALL: string[];
|
|
440
|
+
export interface IMessageResponse {
|
|
441
|
+
success: boolean;
|
|
442
|
+
message: string;
|
|
443
|
+
messageKey?: string;
|
|
444
|
+
messageVariables?: Record<string, unknown>;
|
|
445
|
+
_meta?: IRequestMeta;
|
|
446
|
+
}
|
|
447
|
+
export interface IFileBasicInfo {
|
|
448
|
+
id: string;
|
|
449
|
+
name: string;
|
|
450
|
+
contentType: string;
|
|
451
|
+
size: string;
|
|
452
|
+
url: string | null;
|
|
453
|
+
}
|
|
454
|
+
export interface IUploadedFile {
|
|
455
|
+
id?: string;
|
|
456
|
+
name: string;
|
|
457
|
+
key: string;
|
|
458
|
+
size: number;
|
|
459
|
+
contentType: string;
|
|
460
|
+
}
|
|
461
|
+
export interface IFolderBasicInfo {
|
|
462
|
+
id: string;
|
|
463
|
+
name: string;
|
|
464
|
+
slug: string;
|
|
465
|
+
}
|
|
466
|
+
export interface IStorageConfigBasicInfo {
|
|
467
|
+
id: string;
|
|
468
|
+
name: string;
|
|
469
|
+
isDefault: boolean;
|
|
470
|
+
}
|
|
471
|
+
export interface IFileUploadOptions {
|
|
472
|
+
storageConfigId?: string;
|
|
473
|
+
folderPath?: string;
|
|
474
|
+
maxWidth?: number;
|
|
475
|
+
maxHeight?: number;
|
|
476
|
+
quality?: number;
|
|
477
|
+
compress?: boolean;
|
|
478
|
+
isPrivate?: boolean;
|
|
479
|
+
}
|
|
480
|
+
export interface ISelectFilter {
|
|
481
|
+
page: number;
|
|
482
|
+
pageSize: number;
|
|
483
|
+
search: string;
|
|
484
|
+
}
|
|
485
|
+
export interface IFileSelectFilter extends ISelectFilter {
|
|
486
|
+
contentTypes?: string[];
|
|
487
|
+
folderId?: string;
|
|
488
|
+
storageConfigId?: string;
|
|
489
|
+
}
|
|
490
|
+
export type UploadFileFn = (file: File, options?: IFileUploadOptions) => Observable<ISingleResponse<IUploadedFile>>;
|
|
491
|
+
export type UploadMultipleFilesFn = (files: File[], options?: IFileUploadOptions) => Observable<ISingleResponse<IUploadedFile[]>>;
|
|
492
|
+
export declare const FILE_TYPE_FILTERS: {
|
|
493
|
+
readonly IMAGES: readonly ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"];
|
|
494
|
+
readonly DOCUMENTS: readonly ["application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"];
|
|
495
|
+
readonly VIDEOS: readonly ["video/mp4", "video/webm", "video/ogg", "video/quicktime"];
|
|
496
|
+
readonly AUDIO: readonly ["audio/mpeg", "audio/wav", "audio/ogg", "audio/webm"];
|
|
497
|
+
readonly ALL: string[];
|
|
508
498
|
};
|
|
509
|
-
declare function getAcceptString(contentTypes: string[]): string;
|
|
510
|
-
declare function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean;
|
|
511
|
-
declare function getFileIconClass(contentType: string): string;
|
|
512
|
-
declare function formatFileSize(sizeInKb: string | number): string;
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
type
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
}
|
|
528
|
-
|
|
499
|
+
export declare function getAcceptString(contentTypes: string[]): string;
|
|
500
|
+
export declare function isFileTypeAllowed(file: File, allowedTypes: string[]): boolean;
|
|
501
|
+
export declare function getFileIconClass(contentType: string): string;
|
|
502
|
+
export declare function formatFileSize(sizeInKb: string | number): string;
|
|
503
|
+
export interface IPagination {
|
|
504
|
+
pageSize: number;
|
|
505
|
+
currentPage: number;
|
|
506
|
+
}
|
|
507
|
+
export type ISort = Record<string, 'ASC' | 'DESC'>;
|
|
508
|
+
export type IFilter = Record<string, string | number | boolean | null | undefined | string[] | number[]>;
|
|
509
|
+
export interface IFilterData {
|
|
510
|
+
filter?: IFilter;
|
|
511
|
+
pagination?: IPagination;
|
|
512
|
+
select?: string[];
|
|
513
|
+
sort?: ISort;
|
|
514
|
+
withDeleted?: boolean;
|
|
515
|
+
extraKey?: string[];
|
|
516
|
+
}
|
|
529
517
|
/** A translatable message from the backend: `messageKey` is looked up and `{{name}}` is filled from `messageVariables`, which may themselves be message references. */
|
|
530
|
-
interface IMessageRef {
|
|
531
|
-
|
|
532
|
-
|
|
518
|
+
export interface IMessageRef {
|
|
519
|
+
messageKey: string;
|
|
520
|
+
messageVariables?: Record<string, unknown>;
|
|
533
521
|
}
|
|
534
|
-
|
|
535
522
|
/**
|
|
536
523
|
* Auth State Provider Interface
|
|
537
524
|
*
|
|
538
525
|
* Abstracts auth state access for feature packages (form-builder, etc.)
|
|
539
526
|
* that need to check authentication status without depending on ng-auth directly.
|
|
540
527
|
*/
|
|
541
|
-
interface IAuthStateProvider {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
528
|
+
export interface IAuthStateProvider {
|
|
529
|
+
/** Signal indicating if user is currently authenticated */
|
|
530
|
+
isAuthenticated: Signal<boolean>;
|
|
531
|
+
/** Initialize auth state (restore session from cookies/storage) */
|
|
532
|
+
initialize(): Observable<void>;
|
|
546
533
|
}
|
|
547
534
|
/**
|
|
548
535
|
* User data for dropdowns and selectors
|
|
549
536
|
*/
|
|
550
|
-
interface IUserBasicInfo {
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
537
|
+
export interface IUserBasicInfo {
|
|
538
|
+
id: string;
|
|
539
|
+
name: string;
|
|
540
|
+
email: string;
|
|
554
541
|
}
|
|
555
542
|
/**
|
|
556
543
|
* User Provider Interface - Abstracts user data access for IAM and other feature packages.
|
|
557
544
|
*/
|
|
558
|
-
interface IUserProvider {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
545
|
+
export interface IUserProvider {
|
|
546
|
+
getUsers(filter?: {
|
|
547
|
+
page?: number;
|
|
548
|
+
pageSize?: number;
|
|
549
|
+
search?: string;
|
|
550
|
+
isActive?: boolean;
|
|
551
|
+
[key: string]: unknown;
|
|
552
|
+
}): Observable<IListResponse<IUserBasicInfo>>;
|
|
553
|
+
/** Resolve basic display info for a specific set of user IDs (e.g. reverse permission lookups) */
|
|
554
|
+
getUsersByIds?(ids: string[]): Observable<IListResponse<IUserBasicInfo>>;
|
|
568
555
|
}
|
|
569
556
|
/** Filter params passed to loadUsers function */
|
|
570
|
-
interface IUserSelectFilter {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
557
|
+
export interface IUserSelectFilter {
|
|
558
|
+
page: number;
|
|
559
|
+
pageSize: number;
|
|
560
|
+
search: string;
|
|
574
561
|
}
|
|
575
562
|
/** Function type for loading users */
|
|
576
|
-
type LoadUsersFn = (filter: IUserSelectFilter) => Observable<IListResponse<IUserBasicInfo>>;
|
|
563
|
+
export type LoadUsersFn = (filter: IUserSelectFilter) => Observable<IListResponse<IUserBasicInfo>>;
|
|
577
564
|
/**
|
|
578
565
|
* User branch permission data
|
|
579
566
|
*/
|
|
580
|
-
interface IUserBranchPermission {
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
567
|
+
export interface IUserBranchPermission {
|
|
568
|
+
branchId: string;
|
|
569
|
+
branchName: string;
|
|
570
|
+
companyId: string;
|
|
571
|
+
parentId?: string | null;
|
|
572
|
+
serial?: number | null;
|
|
573
|
+
displayParentId?: string | null;
|
|
574
|
+
}
|
|
575
|
+
export interface IUserCompanyInfo {
|
|
576
|
+
id: string;
|
|
577
|
+
name: string;
|
|
588
578
|
}
|
|
589
579
|
/**
|
|
590
580
|
* User Permission Provider Interface - Abstracts user permission data access operations.
|
|
591
581
|
*/
|
|
592
|
-
interface IUserPermissionProvider {
|
|
593
|
-
|
|
594
|
-
|
|
582
|
+
export interface IUserPermissionProvider {
|
|
583
|
+
getUserBranchPermissions(userId: string, companyId?: string): Observable<ISingleResponse<IUserBranchPermission[]>>;
|
|
584
|
+
getUserCompanyPermissions(userId: string): Observable<ISingleResponse<IUserCompanyInfo[]>>;
|
|
595
585
|
}
|
|
596
586
|
/**
|
|
597
587
|
* Company basic info for dropdowns
|
|
598
588
|
*/
|
|
599
|
-
interface ICompanyBasicInfo {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
589
|
+
export interface ICompanyBasicInfo {
|
|
590
|
+
id: string;
|
|
591
|
+
name: string;
|
|
592
|
+
slug?: string;
|
|
603
593
|
}
|
|
604
594
|
/**
|
|
605
595
|
* Branch basic info for dropdowns and display
|
|
606
596
|
*/
|
|
607
|
-
interface IBranchBasicInfo {
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
597
|
+
export interface IBranchBasicInfo {
|
|
598
|
+
id: string;
|
|
599
|
+
name: string;
|
|
600
|
+
slug?: string;
|
|
611
601
|
}
|
|
612
602
|
/**
|
|
613
603
|
* Company API Provider Interface
|
|
614
604
|
*/
|
|
615
|
-
interface ICompanyApiProvider {
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
605
|
+
export interface ICompanyApiProvider {
|
|
606
|
+
getCompanies(filter?: {
|
|
607
|
+
page?: number;
|
|
608
|
+
pageSize?: number;
|
|
609
|
+
search?: string;
|
|
610
|
+
}): Observable<IListResponse<ICompanyBasicInfo>>;
|
|
611
|
+
/** Resolve basic display info for a specific set of company IDs (e.g. reverse permission lookups) */
|
|
612
|
+
getCompaniesByIds?(ids: string[]): Observable<IListResponse<ICompanyBasicInfo>>;
|
|
613
|
+
/** Resolve basic display info for a specific set of branch IDs (e.g. reverse permission lookups) */
|
|
614
|
+
getBranchesByIds?(ids: string[]): Observable<IListResponse<IBranchBasicInfo>>;
|
|
625
615
|
}
|
|
626
616
|
/**
|
|
627
617
|
* User role info for profile display
|
|
628
618
|
*/
|
|
629
|
-
interface IProfileRoleInfo {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
619
|
+
export interface IProfileRoleInfo {
|
|
620
|
+
id: string;
|
|
621
|
+
name: string;
|
|
622
|
+
description?: string | null;
|
|
633
623
|
}
|
|
634
624
|
/**
|
|
635
625
|
* User action info for profile display
|
|
636
626
|
*/
|
|
637
|
-
interface IProfileActionInfo {
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
627
|
+
export interface IProfileActionInfo {
|
|
628
|
+
id: string;
|
|
629
|
+
name: string;
|
|
630
|
+
code: string;
|
|
631
|
+
description?: string | null;
|
|
642
632
|
}
|
|
643
633
|
/**
|
|
644
634
|
* Profile Permission Provider Interface - Abstracts permission data access for profile page.
|
|
645
635
|
*/
|
|
646
|
-
interface IProfilePermissionProvider {
|
|
647
|
-
|
|
648
|
-
|
|
636
|
+
export interface IProfilePermissionProvider {
|
|
637
|
+
getUserRoles(userId: string, branchId?: string): Observable<ISingleResponse<IProfileRoleInfo[]>>;
|
|
638
|
+
getUserActions(userId: string, branchId?: string): Observable<ISingleResponse<IProfileActionInfo[]>>;
|
|
649
639
|
}
|
|
650
640
|
/** A permission action (IAM action code) for pickers */
|
|
651
|
-
interface IActionBasicInfo {
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
}
|
|
641
|
+
export interface IActionBasicInfo {
|
|
642
|
+
id: string;
|
|
643
|
+
name: string;
|
|
644
|
+
/** Null for a grouping action that only nests others. */
|
|
645
|
+
code: string | null;
|
|
646
|
+
description?: string | null;
|
|
647
|
+
parentId?: string | null;
|
|
648
|
+
serial?: number | null;
|
|
649
|
+
}
|
|
650
|
+
/** `company`: the caller's company whitelist (assigning access). `all`: every action (designing what a feature checks). */
|
|
651
|
+
export type ActionScope = 'company' | 'all';
|
|
660
652
|
/**
|
|
661
653
|
* Action Provider Interface - Lists the permission actions a feature package can require,
|
|
662
654
|
* without depending on ng-iam directly.
|
|
663
655
|
*/
|
|
664
|
-
interface IActionProvider {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
656
|
+
export interface IActionProvider {
|
|
657
|
+
getActions(scope?: ActionScope): Observable<ISingleResponse<IActionBasicInfo[]>>;
|
|
658
|
+
/** False when the backing service is switched off, so pickers fall back to typing codes. Defaults to available. */
|
|
659
|
+
isAvailable?(): boolean;
|
|
668
660
|
}
|
|
669
661
|
/**
|
|
670
662
|
* File Provider Interface - Provides file loading and upload functionality.
|
|
671
663
|
* Used by FileSelectorDialogComponent to load files and handle uploads.
|
|
672
664
|
*/
|
|
673
|
-
interface IFileProvider {
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
id: string;
|
|
715
|
-
name: string;
|
|
716
|
-
contentType: string;
|
|
717
|
-
url: string;
|
|
665
|
+
export interface IFileProvider {
|
|
666
|
+
/** Load files with filtering and pagination */
|
|
667
|
+
loadFiles(filter: IFileSelectFilter): Observable<IListResponse<IFileBasicInfo>>;
|
|
668
|
+
/** Upload a single file and register in file manager */
|
|
669
|
+
uploadFile(file: File, options?: IFileUploadOptions): Observable<ISingleResponse<IUploadedFile>>;
|
|
670
|
+
/** Upload multiple files at once (more efficient batch upload) */
|
|
671
|
+
uploadMultipleFiles?(files: File[], options?: IFileUploadOptions): Observable<ISingleResponse<IUploadedFile[]>>;
|
|
672
|
+
/** Get file URLs by IDs (for refreshing presigned URLs) */
|
|
673
|
+
getFileUrls?(fileIds: string[]): Observable<ISingleResponse<IFileBasicInfo[]>>;
|
|
674
|
+
/** Load folders for folder selector (optional) */
|
|
675
|
+
loadFolders?(filter: ISelectFilter): Observable<IListResponse<IFolderBasicInfo>>;
|
|
676
|
+
/** Load storage configs for config selector (optional) */
|
|
677
|
+
loadStorageConfigs?(filter: ISelectFilter): Observable<IListResponse<IStorageConfigBasicInfo>>;
|
|
678
|
+
}
|
|
679
|
+
export declare enum IconTypeEnum {
|
|
680
|
+
ICON_NAME = 1,
|
|
681
|
+
IMAGE_FILE_LINK = 2
|
|
682
|
+
}
|
|
683
|
+
export declare class CookieService {
|
|
684
|
+
private doc;
|
|
685
|
+
private platformService;
|
|
686
|
+
private readonly request;
|
|
687
|
+
get(): string;
|
|
688
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CookieService, never>;
|
|
689
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
690
|
+
}
|
|
691
|
+
export declare class FaviconService {
|
|
692
|
+
private readonly http;
|
|
693
|
+
private readonly platformService;
|
|
694
|
+
private readonly document;
|
|
695
|
+
private svgTemplate;
|
|
696
|
+
apply(): void;
|
|
697
|
+
private render;
|
|
698
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FaviconService, never>;
|
|
699
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
700
|
+
}
|
|
701
|
+
export interface FilesResponseDto {
|
|
702
|
+
id: string;
|
|
703
|
+
name: string;
|
|
704
|
+
contentType: string;
|
|
705
|
+
url: string;
|
|
718
706
|
}
|
|
719
707
|
/**
|
|
720
708
|
* Service to fetch file URLs from the backend.
|
|
721
709
|
* Handles presigned URLs for cloud storage, auto-refresh, and caching.
|
|
722
710
|
*/
|
|
723
|
-
declare class FileUrlService {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
}
|
|
737
|
-
|
|
711
|
+
export declare class FileUrlService {
|
|
712
|
+
private readonly http;
|
|
713
|
+
private readonly appConfig;
|
|
714
|
+
private readonly _cache;
|
|
715
|
+
readonly cache: import("@angular/core").Signal<Map<string, FilesResponseDto>>;
|
|
716
|
+
/** Fetch file URLs from backend and update cache */
|
|
717
|
+
fetchFileUrls(fileIds: string[], forceRefresh?: boolean): Observable<FilesResponseDto[]>;
|
|
718
|
+
/** Fetch single file URL (delegates to fetchFileUrls) */
|
|
719
|
+
fetchSingleFileUrl(fileId: string, forceRefresh?: boolean): Observable<FilesResponseDto | null>;
|
|
720
|
+
private addToCache;
|
|
721
|
+
private getFromCache;
|
|
722
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FileUrlService, never>;
|
|
723
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
724
|
+
}
|
|
738
725
|
/**
|
|
739
726
|
* Permission state management service.
|
|
740
727
|
* Provides signal-based storage and permission checking with wildcard support.
|
|
741
728
|
*/
|
|
742
|
-
declare class PermissionValidatorService {
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
729
|
+
export declare class PermissionValidatorService {
|
|
730
|
+
private readonly _permissions;
|
|
731
|
+
readonly permissions: import("@angular/core").Signal<string[]>;
|
|
732
|
+
private readonly _isLoaded;
|
|
733
|
+
readonly isLoaded: import("@angular/core").Signal<boolean>;
|
|
734
|
+
/** Set permissions (replaces existing) */
|
|
735
|
+
setPermissions(permissions: string[]): void;
|
|
736
|
+
/** Clear all permissions */
|
|
737
|
+
clearPermissions(): void;
|
|
738
|
+
/** Check if user has permission (supports wildcards: '*', 'module.*') */
|
|
739
|
+
hasPermission(code: string): boolean;
|
|
740
|
+
/** Check if user has ANY of the specified permissions (OR logic) */
|
|
741
|
+
hasAnyPermission(code: string[]): boolean;
|
|
742
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PermissionValidatorService, never>;
|
|
743
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
744
|
+
}
|
|
745
|
+
export declare class PlatformService {
|
|
746
|
+
private readonly platformId;
|
|
747
|
+
get isServer(): boolean;
|
|
748
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PlatformService, never>;
|
|
749
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
750
|
+
}
|
|
751
|
+
export declare class TranslateService {
|
|
752
|
+
private readonly localizationState;
|
|
753
|
+
private readonly registry;
|
|
754
|
+
translate(key: string, params?: Record<string, string | unknown>): string;
|
|
755
|
+
translateRef(ref: IMessageRef): string;
|
|
756
|
+
translateSignal(key: string, params?: Record<string, string | number>): Signal<string>;
|
|
757
|
+
private isMessageRef;
|
|
758
|
+
private interpolate;
|
|
759
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateService, never>;
|
|
760
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
761
|
+
}
|
|
762
|
+
export declare class EditModeElementChangerDirective {
|
|
763
|
+
private readonly el;
|
|
764
|
+
private readonly ngControl;
|
|
765
|
+
readonly isEditMode: import("@angular/core").InputSignal<boolean>;
|
|
766
|
+
constructor();
|
|
767
|
+
private updateControl;
|
|
768
|
+
private updateElement;
|
|
769
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EditModeElementChangerDirective, never>;
|
|
770
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<EditModeElementChangerDirective, "[appEditModeElementChanger]", never, {
|
|
771
|
+
"isEditMode": {
|
|
772
|
+
"alias": "isEditMode";
|
|
773
|
+
"required": true;
|
|
774
|
+
"isSignal": true;
|
|
775
|
+
};
|
|
776
|
+
}, {}, never, never, true, never>;
|
|
777
|
+
}
|
|
789
778
|
/**
|
|
790
779
|
* HasPermission Directive
|
|
791
780
|
*
|
|
@@ -833,63 +822,84 @@ declare class EditModeElementChangerDirective {
|
|
|
833
822
|
* User management content
|
|
834
823
|
* </div>
|
|
835
824
|
*/
|
|
836
|
-
declare class HasPermissionDirective {
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
825
|
+
export declare class HasPermissionDirective {
|
|
826
|
+
private readonly templateRef;
|
|
827
|
+
private readonly viewContainer;
|
|
828
|
+
private readonly permissionValidator;
|
|
829
|
+
/**
|
|
830
|
+
* Permission logic input signal
|
|
831
|
+
* Accepts either:
|
|
832
|
+
* - string: Single permission code to check
|
|
833
|
+
* - ILogicNode: Complex permission logic tree
|
|
834
|
+
*/
|
|
835
|
+
readonly hasPermission: import("@angular/core").InputSignal<string | ILogicNode | null>;
|
|
836
|
+
/**
|
|
837
|
+
* View created state
|
|
838
|
+
*/
|
|
839
|
+
private viewCreated;
|
|
840
|
+
constructor();
|
|
841
|
+
/**
|
|
842
|
+
* Update view based on permission evaluation
|
|
843
|
+
*/
|
|
844
|
+
private updateView;
|
|
845
|
+
/**
|
|
846
|
+
* Clear the view container
|
|
847
|
+
*/
|
|
848
|
+
private clearView;
|
|
849
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<HasPermissionDirective, never>;
|
|
850
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<HasPermissionDirective, "[hasPermission]", never, {
|
|
851
|
+
"hasPermission": {
|
|
852
|
+
"alias": "hasPermission";
|
|
853
|
+
"required": false;
|
|
854
|
+
"isSignal": true;
|
|
855
|
+
};
|
|
856
|
+
}, {}, never, never, true, never>;
|
|
857
|
+
}
|
|
858
|
+
export declare class IsEmptyImageDirective {
|
|
859
|
+
readonly src: import("@angular/core").InputSignal<string>;
|
|
860
|
+
private readonly hasError;
|
|
861
|
+
private readonly defaultImg;
|
|
862
|
+
readonly imageSrc: import("@angular/core").Signal<string>;
|
|
863
|
+
onError(): void;
|
|
864
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<IsEmptyImageDirective, never>;
|
|
865
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<IsEmptyImageDirective, "img", never, {
|
|
866
|
+
"src": {
|
|
867
|
+
"alias": "src";
|
|
868
|
+
"required": false;
|
|
869
|
+
"isSignal": true;
|
|
870
|
+
};
|
|
871
|
+
}, {}, never, never, true, never>;
|
|
872
|
+
}
|
|
873
|
+
export declare class PreventDefaultDirective {
|
|
874
|
+
readonly eventType: import("@angular/core").InputSignal<"click" | "keydown" | "keyup">;
|
|
875
|
+
readonly preventKey: import("@angular/core").InputSignal<string | undefined>;
|
|
876
|
+
readonly action: import("@angular/core").OutputEmitterRef<Event>;
|
|
877
|
+
onClick(event: MouseEvent): void;
|
|
878
|
+
onKeydown(event: KeyboardEvent): void;
|
|
879
|
+
onKeyup(event: KeyboardEvent): void;
|
|
880
|
+
private processEvent;
|
|
881
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PreventDefaultDirective, never>;
|
|
882
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PreventDefaultDirective, "[appPreventDefault]", never, {
|
|
883
|
+
"eventType": {
|
|
884
|
+
"alias": "eventType";
|
|
885
|
+
"required": false;
|
|
886
|
+
"isSignal": true;
|
|
887
|
+
};
|
|
888
|
+
"preventKey": {
|
|
889
|
+
"alias": "preventKey";
|
|
890
|
+
"required": false;
|
|
891
|
+
"isSignal": true;
|
|
892
|
+
};
|
|
893
|
+
}, {
|
|
894
|
+
"action": "action";
|
|
895
|
+
}, never, never, true, never>;
|
|
896
|
+
}
|
|
897
|
+
export declare class TranslatePipe implements PipeTransform {
|
|
898
|
+
private readonly translateAdapter;
|
|
899
|
+
transform(key: string | IMessageRef | null | undefined, params?: Record<string, string | number> | null, fallback?: string): string;
|
|
900
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TranslatePipe, never>;
|
|
901
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<TranslatePipe, "translate", true>;
|
|
902
|
+
}
|
|
893
903
|
/**
|
|
894
904
|
* HTTP context token to skip global error toast.
|
|
895
905
|
* Use when component handles error display locally.
|
|
@@ -901,12 +911,12 @@ declare class TranslatePipe implements PipeTransform {
|
|
|
901
911
|
* });
|
|
902
912
|
* ```
|
|
903
913
|
*/
|
|
904
|
-
declare const SKIP_ERROR_TOAST: HttpContextToken<boolean>;
|
|
914
|
+
export declare const SKIP_ERROR_TOAST: HttpContextToken<boolean>;
|
|
905
915
|
/**
|
|
906
916
|
* Whether errorCatchingInterceptor already showed this failure as a toast, so a caller's own
|
|
907
917
|
* catch block adds one only for failures the user has not been told about yet.
|
|
908
918
|
*/
|
|
909
|
-
declare function isErrorToastShown(error: unknown): boolean;
|
|
919
|
+
export declare function isErrorToastShown(error: unknown): boolean;
|
|
910
920
|
/**
|
|
911
921
|
* Error Catching Interceptor
|
|
912
922
|
* Displays error messages for failed HTTP requests using backend response.
|
|
@@ -933,94 +943,105 @@ declare function isErrorToastShown(error: unknown): boolean;
|
|
|
933
943
|
* )
|
|
934
944
|
* ```
|
|
935
945
|
*/
|
|
936
|
-
declare function errorCatchingInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>>;
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
946
|
+
export declare function errorCatchingInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>>;
|
|
947
|
+
export interface IResolverModuleConfig {
|
|
948
|
+
modules: string[];
|
|
949
|
+
fallbackMessages?: Record<string, string>;
|
|
950
|
+
}
|
|
951
|
+
export declare function resolveTranslationModule(config: IResolverModuleConfig): ResolveFn<boolean>;
|
|
952
|
+
export interface IApiService<DtoT, InterfaceT> {
|
|
953
|
+
insert(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;
|
|
954
|
+
insertMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;
|
|
955
|
+
findById(id: string, select?: string[]): Promise<ISingleResponse<InterfaceT>>;
|
|
956
|
+
findByIds(ids: string[], select?: string[] | string): Promise<IListResponse<InterfaceT>>;
|
|
957
|
+
getAll(filter: IFilterData, search?: string): Promise<IListResponse<InterfaceT>>;
|
|
958
|
+
getByFilter(filter: Record<string, unknown>): Promise<ISingleResponse<InterfaceT>>;
|
|
959
|
+
update(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;
|
|
960
|
+
updateMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;
|
|
961
|
+
bulkUpsert(toInsert: DtoT[], toUpdate: DtoT[]): Promise<InterfaceT[]>;
|
|
962
|
+
delete(deleteDto: IDeleteData): Promise<IMessageResponse>;
|
|
963
|
+
}
|
|
964
|
+
export declare abstract class ApiResourceService<DtoT, InterfaceT> implements IApiService<DtoT, InterfaceT> {
|
|
965
|
+
protected readonly http: HttpClient;
|
|
966
|
+
private readonly _config;
|
|
967
|
+
protected readonly baseUrl: string;
|
|
968
|
+
protected readonly moduleApiName: string;
|
|
969
|
+
readonly searchTerm: import("@angular/core").WritableSignal<string>;
|
|
970
|
+
readonly filterData: import("@angular/core").WritableSignal<IFilterData>;
|
|
971
|
+
private readonly _active;
|
|
972
|
+
readonly listResource: ResourceRef<IListResponse<InterfaceT> | undefined>;
|
|
973
|
+
readonly isLoading: import("@angular/core").Signal<boolean>;
|
|
974
|
+
readonly data: import("@angular/core").Signal<InterfaceT[]>;
|
|
975
|
+
readonly total: import("@angular/core").Signal<number>;
|
|
976
|
+
readonly pageInfo: import("@angular/core").Signal<import("@flusys/ng-shared").IPaginationMeta | undefined>;
|
|
977
|
+
readonly hasMore: import("@angular/core").Signal<boolean>;
|
|
978
|
+
readonly error: import("@angular/core").Signal<Error | undefined>;
|
|
979
|
+
readonly status: import("@angular/core").Signal<ResourceStatus>;
|
|
980
|
+
constructor(moduleApiName: string, serviceName?: ServiceName);
|
|
981
|
+
protected getHttpOptions(endpoint: string, params?: HttpParams): {
|
|
982
|
+
params?: HttpParams | undefined;
|
|
983
|
+
headers: HttpHeaders;
|
|
984
|
+
};
|
|
985
|
+
private _getAllObs;
|
|
986
|
+
private _activate;
|
|
987
|
+
fetchList(search?: string, filter?: Partial<IFilterData>): void;
|
|
988
|
+
setPagination(pagination: IPagination): void;
|
|
989
|
+
nextPage(): void;
|
|
990
|
+
resetPagination(): void;
|
|
991
|
+
reload(): void;
|
|
992
|
+
protected post<R>(endpoint: string, body: unknown, params?: HttpParams): Promise<R>;
|
|
993
|
+
insert(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;
|
|
994
|
+
insertMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;
|
|
995
|
+
findById(id: string, select?: string[]): Promise<ISingleResponse<InterfaceT>>;
|
|
996
|
+
getAll(filter: IFilterData, search?: string): Promise<IListResponse<InterfaceT>>;
|
|
997
|
+
update(dto: DtoT): Promise<ISingleResponse<InterfaceT>>;
|
|
998
|
+
updateMany(dtos: DtoT[]): Promise<IBulkResponse<InterfaceT>>;
|
|
999
|
+
delete(deleteDto: IDeleteData): Promise<IMessageResponse>;
|
|
1000
|
+
findByIds(ids: string[], select?: string[] | string): Promise<IListResponse<InterfaceT>>;
|
|
1001
|
+
getByFilter(filter: Record<string, unknown>): Promise<ISingleResponse<InterfaceT>>;
|
|
1002
|
+
bulkUpsert(toInsert: DtoT[], toUpdate: DtoT[]): Promise<InterfaceT[]>;
|
|
1003
|
+
}
|
|
1004
|
+
export declare abstract class BaseFormControl<T> implements ControlValueAccessor, FormValueControl<T> {
|
|
1005
|
+
protected readonly injector: Injector;
|
|
1006
|
+
abstract readonly value: ReturnType<typeof model<T>>;
|
|
1007
|
+
readonly disabled: import("@angular/core").ModelSignal<boolean>;
|
|
1008
|
+
readonly touched: import("@angular/core").ModelSignal<boolean>;
|
|
1009
|
+
private onChange;
|
|
1010
|
+
private onTouched;
|
|
1011
|
+
private writeDepth;
|
|
1012
|
+
/**
|
|
1013
|
+
* Wire up the ControlValueAccessor ↔ signal bridge.
|
|
1014
|
+
* Call once at the end of the subclass constructor.
|
|
1015
|
+
*
|
|
1016
|
+
* Signal-form consumers ([formField]) don't need this — Angular's
|
|
1017
|
+
* FormField directive binds directly to `value`.
|
|
1018
|
+
*
|
|
1019
|
+
* @example
|
|
1020
|
+
* constructor() { super(); this.initializeFormControl(); }
|
|
1021
|
+
*/
|
|
1022
|
+
protected initializeFormControl(): void;
|
|
1023
|
+
writeValue(value: T): void;
|
|
1024
|
+
registerOnChange(fn: (value: T) => void): void;
|
|
1025
|
+
registerOnTouched(fn: () => void): void;
|
|
1026
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1027
|
+
/** Call on blur / panel-close to propagate touched state. */
|
|
1028
|
+
protected markAsTouched(): void;
|
|
1029
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormControl<any>, never>;
|
|
1030
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormControl<any>, never, never, {
|
|
1031
|
+
"disabled": {
|
|
1032
|
+
"alias": "disabled";
|
|
1033
|
+
"required": false;
|
|
1034
|
+
"isSignal": true;
|
|
1035
|
+
};
|
|
1036
|
+
"touched": {
|
|
1037
|
+
"alias": "touched";
|
|
1038
|
+
"required": false;
|
|
1039
|
+
"isSignal": true;
|
|
1040
|
+
};
|
|
1041
|
+
}, {
|
|
1042
|
+
"disabled": "disabledChange";
|
|
1043
|
+
"touched": "touchedChange";
|
|
1044
|
+
}, never, never, true, never>;
|
|
1024
1045
|
}
|
|
1025
1046
|
/**
|
|
1026
1047
|
* Factory function to provide NG_VALUE_ACCESSOR for a component.
|
|
@@ -1034,47 +1055,74 @@ declare abstract class BaseFormControl<T> implements ControlValueAccessor, FormV
|
|
|
1034
1055
|
* export class LazySelectComponent extends BaseFormControl<string | null> {}
|
|
1035
1056
|
* ```
|
|
1036
1057
|
*/
|
|
1037
|
-
declare function provideValueAccessor<T extends new (...args: unknown[]) => ControlValueAccessor>(component: T): {
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1058
|
+
export declare function provideValueAccessor<T extends new (...args: unknown[]) => ControlValueAccessor>(component: T): {
|
|
1059
|
+
provide: import("@angular/core").InjectionToken<readonly ControlValueAccessor[]>;
|
|
1060
|
+
useExisting: import("@angular/core").Type<any>;
|
|
1061
|
+
multi: boolean;
|
|
1041
1062
|
};
|
|
1042
|
-
|
|
1043
1063
|
/** Shared action loading for the single and multi permission pickers. */
|
|
1044
|
-
declare abstract class BaseActionSelectComponent {
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1064
|
+
export declare abstract class BaseActionSelectComponent {
|
|
1065
|
+
private readonly provider;
|
|
1066
|
+
readonly placeholder: import("@angular/core").InputSignal<string>;
|
|
1067
|
+
readonly inputId: import("@angular/core").InputSignal<string>;
|
|
1068
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
1069
|
+
readonly scope: import("@angular/core").InputSignal<ActionScope>;
|
|
1070
|
+
readonly hasProvider: boolean;
|
|
1071
|
+
readonly actions: import("@angular/core").ResourceRef<IActionBasicInfo[] | undefined>;
|
|
1072
|
+
/** Picker mode; typing codes is the fallback when there is no provider or the actions could not be loaded. */
|
|
1073
|
+
readonly useSelect: import("@angular/core").Signal<boolean>;
|
|
1074
|
+
private readonly actionTree;
|
|
1075
|
+
private readonly knownCodes;
|
|
1076
|
+
/** The action tree plus any saved code that is not (or no longer) an action, so the selection still shows. */
|
|
1077
|
+
protected treeWith(saved: string[]): TreeNode[];
|
|
1078
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseActionSelectComponent, never>;
|
|
1079
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseActionSelectComponent, never, never, {
|
|
1080
|
+
"placeholder": {
|
|
1081
|
+
"alias": "placeholder";
|
|
1082
|
+
"required": false;
|
|
1083
|
+
"isSignal": true;
|
|
1084
|
+
};
|
|
1085
|
+
"inputId": {
|
|
1086
|
+
"alias": "inputId";
|
|
1087
|
+
"required": false;
|
|
1088
|
+
"isSignal": true;
|
|
1089
|
+
};
|
|
1090
|
+
"disabled": {
|
|
1091
|
+
"alias": "disabled";
|
|
1092
|
+
"required": false;
|
|
1093
|
+
"isSignal": true;
|
|
1094
|
+
};
|
|
1095
|
+
"scope": {
|
|
1096
|
+
"alias": "scope";
|
|
1097
|
+
"required": false;
|
|
1098
|
+
"isSignal": true;
|
|
1099
|
+
};
|
|
1100
|
+
}, {}, never, never, true, never>;
|
|
1101
|
+
}
|
|
1061
1102
|
/**
|
|
1062
1103
|
* Picks several permission action codes from the action tree of ACTION_PROVIDER (wired by ng-iam);
|
|
1063
1104
|
* without an available provider, or when loading fails, it falls back to typing codes as chips (Enter adds one).
|
|
1064
1105
|
*
|
|
1065
1106
|
* @example
|
|
1066
|
-
* <lib-action-multi-select [(value)]="
|
|
1107
|
+
* <lib-action-multi-select [(value)]="codes" inputId="codes" />
|
|
1067
1108
|
*/
|
|
1068
|
-
declare class ActionMultiSelectComponent extends BaseActionSelectComponent {
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1109
|
+
export declare class ActionMultiSelectComponent extends BaseActionSelectComponent {
|
|
1110
|
+
readonly value: import("@angular/core").ModelSignal<string[]>;
|
|
1111
|
+
readonly draft: import("@angular/core").WritableSignal<string>;
|
|
1112
|
+
readonly options: import("@angular/core").Signal<TreeNode<unknown>[]>;
|
|
1113
|
+
add(event: Event): void;
|
|
1114
|
+
remove(code: string): void;
|
|
1115
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ActionMultiSelectComponent, never>;
|
|
1116
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ActionMultiSelectComponent, "lib-action-multi-select", never, {
|
|
1117
|
+
"value": {
|
|
1118
|
+
"alias": "value";
|
|
1119
|
+
"required": false;
|
|
1120
|
+
"isSignal": true;
|
|
1121
|
+
};
|
|
1122
|
+
}, {
|
|
1123
|
+
"value": "valueChange";
|
|
1124
|
+
}, never, never, true, never>;
|
|
1076
1125
|
}
|
|
1077
|
-
|
|
1078
1126
|
/**
|
|
1079
1127
|
* Picks a permission action code from the action tree of ACTION_PROVIDER (wired by ng-iam);
|
|
1080
1128
|
* without an available provider, or when loading fails, it falls back to a free-text code input.
|
|
@@ -1082,328 +1130,662 @@ declare class ActionMultiSelectComponent extends BaseActionSelectComponent {
|
|
|
1082
1130
|
* @example
|
|
1083
1131
|
* <lib-action-select [(value)]="permissionCode" inputId="permission" [placeholder]="defaultCode" />
|
|
1084
1132
|
*/
|
|
1085
|
-
declare class ActionSelectComponent extends BaseActionSelectComponent {
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1133
|
+
export declare class ActionSelectComponent extends BaseActionSelectComponent {
|
|
1134
|
+
readonly value: import("@angular/core").ModelSignal<string | null>;
|
|
1135
|
+
readonly showClear: import("@angular/core").InputSignal<boolean>;
|
|
1136
|
+
readonly options: import("@angular/core").Signal<TreeNode<unknown>[]>;
|
|
1137
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ActionSelectComponent, never>;
|
|
1138
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ActionSelectComponent, "lib-action-select", never, {
|
|
1139
|
+
"value": {
|
|
1140
|
+
"alias": "value";
|
|
1141
|
+
"required": false;
|
|
1142
|
+
"isSignal": true;
|
|
1143
|
+
};
|
|
1144
|
+
"showClear": {
|
|
1145
|
+
"alias": "showClear";
|
|
1146
|
+
"required": false;
|
|
1147
|
+
"isSignal": true;
|
|
1148
|
+
};
|
|
1149
|
+
}, {
|
|
1150
|
+
"value": "valueChange";
|
|
1151
|
+
}, never, never, true, never>;
|
|
1152
|
+
}
|
|
1153
|
+
export declare class BaseFormTemplateDirective {
|
|
1154
|
+
readonly key: import("@angular/core").InputSignal<string>;
|
|
1155
|
+
readonly templateRef: TemplateRef<any>;
|
|
1156
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormTemplateDirective, never>;
|
|
1157
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormTemplateDirective, "ng-template[baseFormTemplate]", never, {
|
|
1158
|
+
"key": {
|
|
1159
|
+
"alias": "baseFormTemplate";
|
|
1160
|
+
"required": true;
|
|
1161
|
+
"isSignal": true;
|
|
1162
|
+
};
|
|
1163
|
+
}, {}, never, never, true, never>;
|
|
1164
|
+
}
|
|
1165
|
+
export type FormFieldType = 'text' | 'email' | 'password' | 'number' | 'textarea' | 'select' | 'multiselect' | 'date' | 'checkbox' | 'toggle' | 'custom';
|
|
1166
|
+
export interface IFormSelectOption {
|
|
1167
|
+
label: string;
|
|
1168
|
+
value: unknown;
|
|
1169
|
+
}
|
|
1170
|
+
export interface IFormField {
|
|
1171
|
+
key: string;
|
|
1172
|
+
type: FormFieldType;
|
|
1173
|
+
label: string;
|
|
1174
|
+
placeholder?: string;
|
|
1175
|
+
required?: boolean;
|
|
1176
|
+
disabled?: boolean;
|
|
1177
|
+
fullWidth?: boolean;
|
|
1178
|
+
options?: IFormSelectOption[];
|
|
1179
|
+
minDate?: Date;
|
|
1180
|
+
maxDate?: Date;
|
|
1181
|
+
rows?: number;
|
|
1182
|
+
min?: number;
|
|
1183
|
+
max?: number;
|
|
1184
|
+
hint?: string;
|
|
1185
|
+
}
|
|
1186
|
+
export declare class BaseFormComponent {
|
|
1187
|
+
private readonly translateAdapter;
|
|
1188
|
+
private readonly router;
|
|
1189
|
+
private readonly messageService;
|
|
1190
|
+
readonly fields: import("@angular/core").InputSignal<IFormField[]>;
|
|
1191
|
+
readonly title: import("@angular/core").InputSignal<string>;
|
|
1192
|
+
readonly createTitle: import("@angular/core").InputSignal<string>;
|
|
1193
|
+
readonly editTitle: import("@angular/core").InputSignal<string>;
|
|
1194
|
+
readonly columns: import("@angular/core").InputSignal<1 | 2 | 3>;
|
|
1195
|
+
readonly submitLabel: import("@angular/core").InputSignal<string>;
|
|
1196
|
+
readonly cancelLabel: import("@angular/core").InputSignal<string>;
|
|
1197
|
+
readonly isLoading: import("@angular/core").InputSignal<boolean>;
|
|
1198
|
+
readonly isEditMode: import("@angular/core").InputSignal<boolean>;
|
|
1199
|
+
readonly initialValue: import("@angular/core").InputSignal<Record<string, unknown>>;
|
|
1200
|
+
readonly service: import("@angular/core").InputSignal<ApiResourceService<unknown, unknown> | null>;
|
|
1201
|
+
readonly editId: import("@angular/core").InputSignal<string | null>;
|
|
1202
|
+
readonly cancelRoute: import("@angular/core").InputSignal<string | string[] | null>;
|
|
1203
|
+
readonly navigateOnSuccess: import("@angular/core").InputSignal<string | string[] | null>;
|
|
1204
|
+
readonly mapToRequest: import("@angular/core").InputSignal<((data: Record<string, unknown>, editId: string | null) => unknown) | null>;
|
|
1205
|
+
readonly mapFromEntity: import("@angular/core").InputSignal<((entity: unknown) => Record<string, unknown>) | null>;
|
|
1206
|
+
readonly onSubmit: import("@angular/core").OutputEmitterRef<Record<string, unknown>>;
|
|
1207
|
+
readonly onCancel: import("@angular/core").OutputEmitterRef<void>;
|
|
1208
|
+
readonly onValueChange: import("@angular/core").OutputEmitterRef<Record<string, unknown>>;
|
|
1209
|
+
readonly fieldTemplates: import("@angular/core").Signal<readonly BaseFormTemplateDirective[]>;
|
|
1210
|
+
private readonly _formData;
|
|
1211
|
+
private readonly _submitted;
|
|
1212
|
+
private readonly _isLoadingInternal;
|
|
1213
|
+
private readonly _touchedFields;
|
|
1214
|
+
readonly formData: import("@angular/core").Signal<Record<string, unknown>>;
|
|
1215
|
+
readonly submitted: import("@angular/core").Signal<boolean>;
|
|
1216
|
+
readonly effectiveIsEditMode: import("@angular/core").Signal<boolean>;
|
|
1217
|
+
readonly effectiveIsLoading: import("@angular/core").Signal<boolean>;
|
|
1218
|
+
readonly isFormValid: import("@angular/core").Signal<boolean>;
|
|
1219
|
+
readonly resolvedTitle: import("@angular/core").Signal<string>;
|
|
1220
|
+
readonly gridClass: import("@angular/core").Signal<"grid-cols-1" | "grid-cols-1 md:grid-cols-3" | "grid-cols-1 md:grid-cols-2">;
|
|
1221
|
+
constructor();
|
|
1222
|
+
private loadEntity;
|
|
1223
|
+
getFieldValue(key: string): unknown;
|
|
1224
|
+
setFieldValue(key: string, value: unknown): void;
|
|
1225
|
+
markFieldTouched(key: string): void;
|
|
1226
|
+
isFieldInvalid(field: IFormField): boolean;
|
|
1227
|
+
getFieldTemplate(key: string): TemplateRef<unknown> | null;
|
|
1228
|
+
handleSubmit(): Promise<void>;
|
|
1229
|
+
handleCancel(): void;
|
|
1230
|
+
reset(): void;
|
|
1231
|
+
t(key: string, vars?: Record<string, string | number>): string;
|
|
1232
|
+
private managedSubmit;
|
|
1233
|
+
private checkValidity;
|
|
1234
|
+
private navigateTo;
|
|
1235
|
+
private getDefaultValue;
|
|
1236
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormComponent, never>;
|
|
1237
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BaseFormComponent, "lib-base-form", never, {
|
|
1238
|
+
"fields": {
|
|
1239
|
+
"alias": "fields";
|
|
1240
|
+
"required": true;
|
|
1241
|
+
"isSignal": true;
|
|
1242
|
+
};
|
|
1243
|
+
"title": {
|
|
1244
|
+
"alias": "title";
|
|
1245
|
+
"required": false;
|
|
1246
|
+
"isSignal": true;
|
|
1247
|
+
};
|
|
1248
|
+
"createTitle": {
|
|
1249
|
+
"alias": "createTitle";
|
|
1250
|
+
"required": false;
|
|
1251
|
+
"isSignal": true;
|
|
1252
|
+
};
|
|
1253
|
+
"editTitle": {
|
|
1254
|
+
"alias": "editTitle";
|
|
1255
|
+
"required": false;
|
|
1256
|
+
"isSignal": true;
|
|
1257
|
+
};
|
|
1258
|
+
"columns": {
|
|
1259
|
+
"alias": "columns";
|
|
1260
|
+
"required": false;
|
|
1261
|
+
"isSignal": true;
|
|
1262
|
+
};
|
|
1263
|
+
"submitLabel": {
|
|
1264
|
+
"alias": "submitLabel";
|
|
1265
|
+
"required": false;
|
|
1266
|
+
"isSignal": true;
|
|
1267
|
+
};
|
|
1268
|
+
"cancelLabel": {
|
|
1269
|
+
"alias": "cancelLabel";
|
|
1270
|
+
"required": false;
|
|
1271
|
+
"isSignal": true;
|
|
1272
|
+
};
|
|
1273
|
+
"isLoading": {
|
|
1274
|
+
"alias": "isLoading";
|
|
1275
|
+
"required": false;
|
|
1276
|
+
"isSignal": true;
|
|
1277
|
+
};
|
|
1278
|
+
"isEditMode": {
|
|
1279
|
+
"alias": "isEditMode";
|
|
1280
|
+
"required": false;
|
|
1281
|
+
"isSignal": true;
|
|
1282
|
+
};
|
|
1283
|
+
"initialValue": {
|
|
1284
|
+
"alias": "initialValue";
|
|
1285
|
+
"required": false;
|
|
1286
|
+
"isSignal": true;
|
|
1287
|
+
};
|
|
1288
|
+
"service": {
|
|
1289
|
+
"alias": "service";
|
|
1290
|
+
"required": false;
|
|
1291
|
+
"isSignal": true;
|
|
1292
|
+
};
|
|
1293
|
+
"editId": {
|
|
1294
|
+
"alias": "editId";
|
|
1295
|
+
"required": false;
|
|
1296
|
+
"isSignal": true;
|
|
1297
|
+
};
|
|
1298
|
+
"cancelRoute": {
|
|
1299
|
+
"alias": "cancelRoute";
|
|
1300
|
+
"required": false;
|
|
1301
|
+
"isSignal": true;
|
|
1302
|
+
};
|
|
1303
|
+
"navigateOnSuccess": {
|
|
1304
|
+
"alias": "navigateOnSuccess";
|
|
1305
|
+
"required": false;
|
|
1306
|
+
"isSignal": true;
|
|
1307
|
+
};
|
|
1308
|
+
"mapToRequest": {
|
|
1309
|
+
"alias": "mapToRequest";
|
|
1310
|
+
"required": false;
|
|
1311
|
+
"isSignal": true;
|
|
1312
|
+
};
|
|
1313
|
+
"mapFromEntity": {
|
|
1314
|
+
"alias": "mapFromEntity";
|
|
1315
|
+
"required": false;
|
|
1316
|
+
"isSignal": true;
|
|
1317
|
+
};
|
|
1318
|
+
}, {
|
|
1319
|
+
"onSubmit": "onSubmit";
|
|
1320
|
+
"onCancel": "onCancel";
|
|
1321
|
+
"onValueChange": "onValueChange";
|
|
1322
|
+
}, ["fieldTemplates"], never, true, never>;
|
|
1323
|
+
}
|
|
1324
|
+
export declare class BaseListTemplateDirective {
|
|
1325
|
+
readonly key: import("@angular/core").InputSignal<string>;
|
|
1326
|
+
readonly templateRef: TemplateRef<any>;
|
|
1327
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseListTemplateDirective, never>;
|
|
1328
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseListTemplateDirective, "ng-template[baseListTemplate]", never, {
|
|
1329
|
+
"key": {
|
|
1330
|
+
"alias": "baseListTemplate";
|
|
1331
|
+
"required": true;
|
|
1332
|
+
"isSignal": true;
|
|
1333
|
+
};
|
|
1334
|
+
}, {}, never, never, true, never>;
|
|
1335
|
+
}
|
|
1336
|
+
export type TableColumnType = 'text' | 'date' | 'tag' | 'boolean' | 'number' | 'custom';
|
|
1337
|
+
export type ActionSeverity = 'success' | 'info' | 'warn' | 'danger' | 'secondary' | 'contrast';
|
|
1338
|
+
export interface ITagConfig {
|
|
1339
|
+
label?: string;
|
|
1340
|
+
severity: 'success' | 'danger' | 'warn' | 'info' | 'secondary' | 'contrast';
|
|
1341
|
+
}
|
|
1342
|
+
export interface ITableColumn {
|
|
1343
|
+
field: string;
|
|
1344
|
+
header: string;
|
|
1345
|
+
type?: TableColumnType;
|
|
1346
|
+
width?: string;
|
|
1347
|
+
minWidth?: string;
|
|
1348
|
+
align?: 'left' | 'center' | 'right';
|
|
1349
|
+
tagMap?: Record<string, ITagConfig>;
|
|
1350
|
+
dateFormat?: string;
|
|
1351
|
+
truncate?: number;
|
|
1352
|
+
hidden?: boolean;
|
|
1353
|
+
}
|
|
1354
|
+
export interface ITableAction<T = unknown> {
|
|
1355
|
+
icon: string;
|
|
1356
|
+
tooltip?: string;
|
|
1357
|
+
severity?: ActionSeverity;
|
|
1358
|
+
show?: (item: T) => boolean;
|
|
1359
|
+
disabled?: (item: T) => boolean;
|
|
1360
|
+
handler: (item: T) => void;
|
|
1361
|
+
}
|
|
1362
|
+
export declare class BaseListComponent {
|
|
1363
|
+
private readonly translateAdapter;
|
|
1364
|
+
private readonly router;
|
|
1365
|
+
private readonly messageService;
|
|
1366
|
+
private readonly appConfig;
|
|
1367
|
+
private readonly confirmationService;
|
|
1368
|
+
readonly columns: import("@angular/core").InputSignal<ITableColumn[]>;
|
|
1369
|
+
readonly actions: import("@angular/core").InputSignal<ITableAction<unknown>[]>;
|
|
1370
|
+
readonly title: import("@angular/core").InputSignal<string>;
|
|
1371
|
+
readonly showCreateButton: import("@angular/core").InputSignal<boolean>;
|
|
1372
|
+
readonly searchable: import("@angular/core").InputSignal<boolean>;
|
|
1373
|
+
readonly pageSize: import("@angular/core").InputSignal<number>;
|
|
1374
|
+
readonly scrollHeight: import("@angular/core").InputSignal<string>;
|
|
1375
|
+
readonly emptyMessage: import("@angular/core").InputSignal<string>;
|
|
1376
|
+
readonly createButtonLabel: import("@angular/core").InputSignal<string>;
|
|
1377
|
+
readonly createButtonIcon: import("@angular/core").InputSignal<string>;
|
|
1378
|
+
readonly data: import("@angular/core").InputSignal<unknown[]>;
|
|
1379
|
+
readonly total: import("@angular/core").InputSignal<number>;
|
|
1380
|
+
readonly isLoading: import("@angular/core").InputSignal<boolean>;
|
|
1381
|
+
readonly service: import("@angular/core").InputSignal<ApiResourceService<unknown, unknown> | null>;
|
|
1382
|
+
readonly filter: import("@angular/core").InputSignal<IFilter>;
|
|
1383
|
+
readonly createRoute: import("@angular/core").InputSignal<string | null>;
|
|
1384
|
+
readonly editRoute: import("@angular/core").InputSignal<string | null>;
|
|
1385
|
+
readonly deleteConfirmField: import("@angular/core").InputSignal<string | null>;
|
|
1386
|
+
readonly deleteType: import("@angular/core").InputSignal<DeleteType>;
|
|
1387
|
+
readonly idField: import("@angular/core").InputSignal<string>;
|
|
1388
|
+
readonly canEdit: import("@angular/core").InputSignal<((item: unknown) => boolean) | null>;
|
|
1389
|
+
readonly canDelete: import("@angular/core").InputSignal<((item: unknown) => boolean) | null>;
|
|
1390
|
+
readonly onCreate: import("@angular/core").OutputEmitterRef<void>;
|
|
1391
|
+
readonly onLazyLoad: import("@angular/core").OutputEmitterRef<{
|
|
1392
|
+
first: number;
|
|
1393
|
+
rows: number;
|
|
1394
|
+
}>;
|
|
1395
|
+
readonly onSearch: import("@angular/core").OutputEmitterRef<string>;
|
|
1396
|
+
readonly columnTemplates: import("@angular/core").Signal<readonly BaseListTemplateDirective[]>;
|
|
1397
|
+
private readonly _first;
|
|
1398
|
+
private readonly _searchTerm;
|
|
1399
|
+
readonly first: import("@angular/core").Signal<number>;
|
|
1400
|
+
readonly searchTerm: import("@angular/core").Signal<string>;
|
|
1401
|
+
readonly effectiveData: import("@angular/core").Signal<unknown[]>;
|
|
1402
|
+
readonly effectiveTotal: import("@angular/core").Signal<number>;
|
|
1403
|
+
readonly effectiveIsLoading: import("@angular/core").Signal<boolean>;
|
|
1404
|
+
readonly effectiveActions: import("@angular/core").Signal<ITableAction<unknown>[]>;
|
|
1405
|
+
readonly visibleColumns: import("@angular/core").Signal<ITableColumn[]>;
|
|
1406
|
+
readonly columnCount: import("@angular/core").Signal<number>;
|
|
1407
|
+
readonly resolvedEmptyMessage: import("@angular/core").Signal<string>;
|
|
1408
|
+
readonly resolvedCreateLabel: import("@angular/core").Signal<string>;
|
|
1409
|
+
handleLazyLoad(event: {
|
|
1410
|
+
first?: number | null;
|
|
1411
|
+
rows?: number | null;
|
|
1412
|
+
}): void;
|
|
1413
|
+
onSearchChange(value: string): void;
|
|
1414
|
+
handleCreate(): void;
|
|
1415
|
+
private handleEditItem;
|
|
1416
|
+
private handleDeleteItem;
|
|
1417
|
+
getFieldValue(item: unknown, field: string): unknown;
|
|
1418
|
+
getFieldValueAsString(item: unknown, field: string): string;
|
|
1419
|
+
getTagConfig(col: ITableColumn, value: unknown): ITagConfig | null;
|
|
1420
|
+
getColumnTemplate(field: string): TemplateRef<unknown> | null;
|
|
1421
|
+
truncateText(value: unknown, limit?: number): string;
|
|
1422
|
+
getCellClass(col: ITableColumn): string;
|
|
1423
|
+
t(key: string, vars?: Record<string, string | number>): string;
|
|
1424
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseListComponent, never>;
|
|
1425
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BaseListComponent, "lib-base-list", never, {
|
|
1426
|
+
"columns": {
|
|
1427
|
+
"alias": "columns";
|
|
1428
|
+
"required": true;
|
|
1429
|
+
"isSignal": true;
|
|
1430
|
+
};
|
|
1431
|
+
"actions": {
|
|
1432
|
+
"alias": "actions";
|
|
1433
|
+
"required": false;
|
|
1434
|
+
"isSignal": true;
|
|
1435
|
+
};
|
|
1436
|
+
"title": {
|
|
1437
|
+
"alias": "title";
|
|
1438
|
+
"required": false;
|
|
1439
|
+
"isSignal": true;
|
|
1440
|
+
};
|
|
1441
|
+
"showCreateButton": {
|
|
1442
|
+
"alias": "showCreateButton";
|
|
1443
|
+
"required": false;
|
|
1444
|
+
"isSignal": true;
|
|
1445
|
+
};
|
|
1446
|
+
"searchable": {
|
|
1447
|
+
"alias": "searchable";
|
|
1448
|
+
"required": false;
|
|
1449
|
+
"isSignal": true;
|
|
1450
|
+
};
|
|
1451
|
+
"pageSize": {
|
|
1452
|
+
"alias": "pageSize";
|
|
1453
|
+
"required": false;
|
|
1454
|
+
"isSignal": true;
|
|
1455
|
+
};
|
|
1456
|
+
"scrollHeight": {
|
|
1457
|
+
"alias": "scrollHeight";
|
|
1458
|
+
"required": false;
|
|
1459
|
+
"isSignal": true;
|
|
1460
|
+
};
|
|
1461
|
+
"emptyMessage": {
|
|
1462
|
+
"alias": "emptyMessage";
|
|
1463
|
+
"required": false;
|
|
1464
|
+
"isSignal": true;
|
|
1465
|
+
};
|
|
1466
|
+
"createButtonLabel": {
|
|
1467
|
+
"alias": "createButtonLabel";
|
|
1468
|
+
"required": false;
|
|
1469
|
+
"isSignal": true;
|
|
1470
|
+
};
|
|
1471
|
+
"createButtonIcon": {
|
|
1472
|
+
"alias": "createButtonIcon";
|
|
1473
|
+
"required": false;
|
|
1474
|
+
"isSignal": true;
|
|
1475
|
+
};
|
|
1476
|
+
"data": {
|
|
1477
|
+
"alias": "data";
|
|
1478
|
+
"required": false;
|
|
1479
|
+
"isSignal": true;
|
|
1480
|
+
};
|
|
1481
|
+
"total": {
|
|
1482
|
+
"alias": "total";
|
|
1483
|
+
"required": false;
|
|
1484
|
+
"isSignal": true;
|
|
1485
|
+
};
|
|
1486
|
+
"isLoading": {
|
|
1487
|
+
"alias": "isLoading";
|
|
1488
|
+
"required": false;
|
|
1489
|
+
"isSignal": true;
|
|
1490
|
+
};
|
|
1491
|
+
"service": {
|
|
1492
|
+
"alias": "service";
|
|
1493
|
+
"required": false;
|
|
1494
|
+
"isSignal": true;
|
|
1495
|
+
};
|
|
1496
|
+
"filter": {
|
|
1497
|
+
"alias": "filter";
|
|
1498
|
+
"required": false;
|
|
1499
|
+
"isSignal": true;
|
|
1500
|
+
};
|
|
1501
|
+
"createRoute": {
|
|
1502
|
+
"alias": "createRoute";
|
|
1503
|
+
"required": false;
|
|
1504
|
+
"isSignal": true;
|
|
1505
|
+
};
|
|
1506
|
+
"editRoute": {
|
|
1507
|
+
"alias": "editRoute";
|
|
1508
|
+
"required": false;
|
|
1509
|
+
"isSignal": true;
|
|
1510
|
+
};
|
|
1511
|
+
"deleteConfirmField": {
|
|
1512
|
+
"alias": "deleteConfirmField";
|
|
1513
|
+
"required": false;
|
|
1514
|
+
"isSignal": true;
|
|
1515
|
+
};
|
|
1516
|
+
"deleteType": {
|
|
1517
|
+
"alias": "deleteType";
|
|
1518
|
+
"required": false;
|
|
1519
|
+
"isSignal": true;
|
|
1520
|
+
};
|
|
1521
|
+
"idField": {
|
|
1522
|
+
"alias": "idField";
|
|
1523
|
+
"required": false;
|
|
1524
|
+
"isSignal": true;
|
|
1525
|
+
};
|
|
1526
|
+
"canEdit": {
|
|
1527
|
+
"alias": "canEdit";
|
|
1528
|
+
"required": false;
|
|
1529
|
+
"isSignal": true;
|
|
1530
|
+
};
|
|
1531
|
+
"canDelete": {
|
|
1532
|
+
"alias": "canDelete";
|
|
1533
|
+
"required": false;
|
|
1534
|
+
"isSignal": true;
|
|
1535
|
+
};
|
|
1536
|
+
}, {
|
|
1537
|
+
"onCreate": "onCreate";
|
|
1538
|
+
"onLazyLoad": "onLazyLoad";
|
|
1539
|
+
"onSearch": "onSearch";
|
|
1540
|
+
}, ["columnTemplates"], never, true, never>;
|
|
1541
|
+
}
|
|
1542
|
+
export declare class FileSelectorDialogComponent {
|
|
1543
|
+
private readonly destroyRef;
|
|
1544
|
+
private readonly translateAdapter;
|
|
1545
|
+
readonly fileProvider: import("@flusys/ng-shared").IFileProvider | null;
|
|
1546
|
+
private abortController;
|
|
1547
|
+
private searchDebounceTimer;
|
|
1548
|
+
readonly header: import("@angular/core").InputSignal<string | undefined>;
|
|
1549
|
+
readonly acceptTypes: import("@angular/core").InputSignal<string[]>;
|
|
1550
|
+
readonly multiple: import("@angular/core").InputSignal<boolean>;
|
|
1551
|
+
readonly dialogHeader: import("@angular/core").Signal<string>;
|
|
1552
|
+
readonly maxSelection: import("@angular/core").InputSignal<number>;
|
|
1553
|
+
readonly pageSize: import("@angular/core").InputSignal<number>;
|
|
1554
|
+
readonly folderId: import("@angular/core").InputSignal<string | undefined>;
|
|
1555
|
+
readonly withUploader: import("@angular/core").InputSignal<boolean>;
|
|
1556
|
+
readonly visible: import("@angular/core").ModelSignal<boolean>;
|
|
1557
|
+
readonly fileSelected: import("@angular/core").OutputEmitterRef<IFileBasicInfo>;
|
|
1558
|
+
readonly filesSelected: import("@angular/core").OutputEmitterRef<IFileBasicInfo[]>;
|
|
1559
|
+
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
1560
|
+
readonly onError: import("@angular/core").OutputEmitterRef<Error>;
|
|
1561
|
+
readonly isLoading: import("@angular/core").WritableSignal<boolean>;
|
|
1562
|
+
readonly files: import("@angular/core").WritableSignal<IFileBasicInfo[]>;
|
|
1563
|
+
readonly selectedFiles: import("@angular/core").WritableSignal<IFileBasicInfo[]>;
|
|
1564
|
+
readonly total: import("@angular/core").WritableSignal<number | undefined>;
|
|
1565
|
+
readonly pagination: import("@angular/core").WritableSignal<IPagination>;
|
|
1566
|
+
readonly searchTerm: import("@angular/core").WritableSignal<string>;
|
|
1567
|
+
readonly folders: import("@angular/core").WritableSignal<IFolderBasicInfo[]>;
|
|
1568
|
+
readonly selectedFolderId: import("@angular/core").WritableSignal<string | null>;
|
|
1569
|
+
readonly selectedFolderObject: import("@angular/core").WritableSignal<IFolderBasicInfo | null>;
|
|
1570
|
+
readonly foldersLoading: import("@angular/core").WritableSignal<boolean>;
|
|
1571
|
+
readonly foldersPagination: import("@angular/core").WritableSignal<IPagination>;
|
|
1572
|
+
readonly foldersTotal: import("@angular/core").WritableSignal<number | undefined>;
|
|
1573
|
+
readonly storageConfigs: import("@angular/core").WritableSignal<IStorageConfigBasicInfo[]>;
|
|
1574
|
+
readonly selectedStorageConfigId: import("@angular/core").WritableSignal<string | null>;
|
|
1575
|
+
readonly selectedStorageConfigObject: import("@angular/core").WritableSignal<IStorageConfigBasicInfo | null>;
|
|
1576
|
+
readonly storageConfigsLoading: import("@angular/core").WritableSignal<boolean>;
|
|
1577
|
+
readonly storageConfigsPagination: import("@angular/core").WritableSignal<IPagination>;
|
|
1578
|
+
readonly storageConfigsTotal: import("@angular/core").WritableSignal<number | undefined>;
|
|
1579
|
+
readonly effectiveStorageConfigId: import("@angular/core").Signal<string | undefined>;
|
|
1580
|
+
readonly uploadFileFn: (file: File, options?: IFileUploadOptions) => import("rxjs").Observable<import("@flusys/ng-shared").ISingleResponse<IUploadedFile>>;
|
|
1581
|
+
readonly uploadMultipleFilesFn: ((files: File[], options?: IFileUploadOptions) => import("rxjs").Observable<import("@flusys/ng-shared").ISingleResponse<IUploadedFile[]>>) | undefined;
|
|
1582
|
+
constructor();
|
|
1583
|
+
onSearchChange(value: string): void;
|
|
1584
|
+
onScroll(event: Event): void;
|
|
1585
|
+
toggleSelection(file: IFileBasicInfo): void;
|
|
1586
|
+
isSelected(file: IFileBasicInfo): boolean;
|
|
1587
|
+
isFileAllowed(file: IFileBasicInfo): boolean;
|
|
1588
|
+
isImage(file: IFileBasicInfo): boolean;
|
|
1589
|
+
getFileIcon(file: IFileBasicInfo): string;
|
|
1590
|
+
formatSize(size: string): string;
|
|
1591
|
+
onCancel(): void;
|
|
1592
|
+
onConfirm(): void;
|
|
1593
|
+
onDialogHide(): void;
|
|
1594
|
+
onFolderChange(folderId: string | null): void;
|
|
1595
|
+
onFolderSearch(event: {
|
|
1596
|
+
filter: string;
|
|
1597
|
+
}): void;
|
|
1598
|
+
loadFolders(search?: string): Promise<void>;
|
|
1599
|
+
onStorageConfigChange(configId: string | null): void;
|
|
1600
|
+
onStorageConfigSearch(event: {
|
|
1601
|
+
filter: string;
|
|
1602
|
+
}): void;
|
|
1603
|
+
loadStorageConfigs(search?: string): Promise<void>;
|
|
1604
|
+
onFileUploaded(uploadedFile: IUploadedFile): void;
|
|
1605
|
+
private resetState;
|
|
1606
|
+
private fetchFiles;
|
|
1607
|
+
private t;
|
|
1608
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FileSelectorDialogComponent, never>;
|
|
1609
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FileSelectorDialogComponent, "lib-file-selector-dialog", never, {
|
|
1610
|
+
"header": {
|
|
1611
|
+
"alias": "header";
|
|
1612
|
+
"required": false;
|
|
1613
|
+
"isSignal": true;
|
|
1614
|
+
};
|
|
1615
|
+
"acceptTypes": {
|
|
1616
|
+
"alias": "acceptTypes";
|
|
1617
|
+
"required": false;
|
|
1618
|
+
"isSignal": true;
|
|
1619
|
+
};
|
|
1620
|
+
"multiple": {
|
|
1621
|
+
"alias": "multiple";
|
|
1622
|
+
"required": false;
|
|
1623
|
+
"isSignal": true;
|
|
1624
|
+
};
|
|
1625
|
+
"maxSelection": {
|
|
1626
|
+
"alias": "maxSelection";
|
|
1627
|
+
"required": false;
|
|
1628
|
+
"isSignal": true;
|
|
1629
|
+
};
|
|
1630
|
+
"pageSize": {
|
|
1631
|
+
"alias": "pageSize";
|
|
1632
|
+
"required": false;
|
|
1633
|
+
"isSignal": true;
|
|
1634
|
+
};
|
|
1635
|
+
"folderId": {
|
|
1636
|
+
"alias": "folderId";
|
|
1637
|
+
"required": false;
|
|
1638
|
+
"isSignal": true;
|
|
1639
|
+
};
|
|
1640
|
+
"withUploader": {
|
|
1641
|
+
"alias": "withUploader";
|
|
1642
|
+
"required": false;
|
|
1643
|
+
"isSignal": true;
|
|
1644
|
+
};
|
|
1645
|
+
"visible": {
|
|
1646
|
+
"alias": "visible";
|
|
1647
|
+
"required": false;
|
|
1648
|
+
"isSignal": true;
|
|
1649
|
+
};
|
|
1650
|
+
}, {
|
|
1651
|
+
"visible": "visibleChange";
|
|
1652
|
+
"fileSelected": "fileSelected";
|
|
1653
|
+
"filesSelected": "filesSelected";
|
|
1654
|
+
"closed": "closed";
|
|
1655
|
+
"onError": "onError";
|
|
1656
|
+
}, never, never, true, never>;
|
|
1657
|
+
}
|
|
1658
|
+
export declare class FileUploaderComponent {
|
|
1659
|
+
private readonly messageService;
|
|
1660
|
+
private readonly translateAdapter;
|
|
1661
|
+
private readonly fileProvider;
|
|
1662
|
+
readonly uploadFile: import("@angular/core").InputSignal<UploadFileFn | undefined>;
|
|
1663
|
+
readonly uploadMultipleFiles: import("@angular/core").InputSignal<UploadMultipleFilesFn | undefined>;
|
|
1664
|
+
readonly hasUploadCapability: import("@angular/core").Signal<boolean>;
|
|
1665
|
+
private getUploadFn;
|
|
1666
|
+
private getUploadMultipleFn;
|
|
1667
|
+
readonly acceptTypes: import("@angular/core").InputSignal<string[]>;
|
|
1668
|
+
readonly multiple: import("@angular/core").InputSignal<boolean>;
|
|
1669
|
+
readonly maxFiles: import("@angular/core").InputSignal<number>;
|
|
1670
|
+
readonly maxSizeMb: import("@angular/core").InputSignal<number>;
|
|
1671
|
+
readonly uploadOptions: import("@angular/core").InputSignal<IFileUploadOptions>;
|
|
1672
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
1673
|
+
readonly showPreview: import("@angular/core").InputSignal<boolean>;
|
|
1674
|
+
readonly autoUpload: import("@angular/core").InputSignal<boolean>;
|
|
1675
|
+
readonly fileUploaded: import("@angular/core").OutputEmitterRef<IUploadedFile>;
|
|
1676
|
+
readonly filesUploaded: import("@angular/core").OutputEmitterRef<IUploadedFile[]>;
|
|
1677
|
+
readonly onError: import("@angular/core").OutputEmitterRef<Error>;
|
|
1678
|
+
readonly fileSelected: import("@angular/core").OutputEmitterRef<File[]>;
|
|
1679
|
+
readonly isUploading: import("@angular/core").WritableSignal<boolean>;
|
|
1680
|
+
readonly isDragOver: import("@angular/core").WritableSignal<boolean>;
|
|
1681
|
+
readonly uploadProgress: import("@angular/core").WritableSignal<number>;
|
|
1682
|
+
readonly uploadingFileName: import("@angular/core").WritableSignal<string>;
|
|
1683
|
+
readonly selectedFiles: import("@angular/core").WritableSignal<File[]>;
|
|
1684
|
+
readonly acceptString: import("@angular/core").Signal<string>;
|
|
1685
|
+
readonly acceptTypesDisplay: import("@angular/core").Signal<string>;
|
|
1686
|
+
onDragOver(event: DragEvent): void;
|
|
1687
|
+
onDragLeave(event: DragEvent): void;
|
|
1688
|
+
onDrop(event: DragEvent): void;
|
|
1689
|
+
onFileSelected(event: Event): void;
|
|
1690
|
+
private handleFiles;
|
|
1691
|
+
removeFile(file: File): void;
|
|
1692
|
+
uploadFiles(files?: File[]): Promise<void>;
|
|
1693
|
+
private uploadBatch;
|
|
1694
|
+
private uploadSequential;
|
|
1695
|
+
getFileIcon(file: File): string;
|
|
1696
|
+
formatSize(bytes: number): string;
|
|
1697
|
+
private t;
|
|
1698
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FileUploaderComponent, never>;
|
|
1699
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FileUploaderComponent, "lib-file-uploader", never, {
|
|
1700
|
+
"uploadFile": {
|
|
1701
|
+
"alias": "uploadFile";
|
|
1702
|
+
"required": false;
|
|
1703
|
+
"isSignal": true;
|
|
1704
|
+
};
|
|
1705
|
+
"uploadMultipleFiles": {
|
|
1706
|
+
"alias": "uploadMultipleFiles";
|
|
1707
|
+
"required": false;
|
|
1708
|
+
"isSignal": true;
|
|
1709
|
+
};
|
|
1710
|
+
"acceptTypes": {
|
|
1711
|
+
"alias": "acceptTypes";
|
|
1712
|
+
"required": false;
|
|
1713
|
+
"isSignal": true;
|
|
1714
|
+
};
|
|
1715
|
+
"multiple": {
|
|
1716
|
+
"alias": "multiple";
|
|
1717
|
+
"required": false;
|
|
1718
|
+
"isSignal": true;
|
|
1719
|
+
};
|
|
1720
|
+
"maxFiles": {
|
|
1721
|
+
"alias": "maxFiles";
|
|
1722
|
+
"required": false;
|
|
1723
|
+
"isSignal": true;
|
|
1724
|
+
};
|
|
1725
|
+
"maxSizeMb": {
|
|
1726
|
+
"alias": "maxSizeMb";
|
|
1727
|
+
"required": false;
|
|
1728
|
+
"isSignal": true;
|
|
1729
|
+
};
|
|
1730
|
+
"uploadOptions": {
|
|
1731
|
+
"alias": "uploadOptions";
|
|
1732
|
+
"required": false;
|
|
1733
|
+
"isSignal": true;
|
|
1734
|
+
};
|
|
1735
|
+
"disabled": {
|
|
1736
|
+
"alias": "disabled";
|
|
1737
|
+
"required": false;
|
|
1738
|
+
"isSignal": true;
|
|
1739
|
+
};
|
|
1740
|
+
"showPreview": {
|
|
1741
|
+
"alias": "showPreview";
|
|
1742
|
+
"required": false;
|
|
1743
|
+
"isSignal": true;
|
|
1744
|
+
};
|
|
1745
|
+
"autoUpload": {
|
|
1746
|
+
"alias": "autoUpload";
|
|
1747
|
+
"required": false;
|
|
1748
|
+
"isSignal": true;
|
|
1749
|
+
};
|
|
1750
|
+
}, {
|
|
1751
|
+
"fileUploaded": "fileUploaded";
|
|
1752
|
+
"filesUploaded": "filesUploaded";
|
|
1753
|
+
"onError": "onError";
|
|
1754
|
+
"fileSelected": "fileSelected";
|
|
1755
|
+
}, never, never, true, never>;
|
|
1756
|
+
}
|
|
1757
|
+
export declare class IconComponent {
|
|
1758
|
+
readonly icon: import("@angular/core").InputSignal<string>;
|
|
1759
|
+
readonly iconType: import("@angular/core").InputSignal<IconTypeEnum | undefined>;
|
|
1760
|
+
protected readonly IconTypeEnum: typeof IconTypeEnum;
|
|
1761
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<IconComponent, never>;
|
|
1762
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<IconComponent, "lib-icon", never, {
|
|
1763
|
+
"icon": {
|
|
1764
|
+
"alias": "icon";
|
|
1765
|
+
"required": true;
|
|
1766
|
+
"isSignal": true;
|
|
1767
|
+
};
|
|
1768
|
+
"iconType": {
|
|
1769
|
+
"alias": "iconType";
|
|
1770
|
+
"required": false;
|
|
1771
|
+
"isSignal": true;
|
|
1772
|
+
};
|
|
1773
|
+
}, {}, never, never, true, never>;
|
|
1774
|
+
}
|
|
1775
|
+
export declare class InlineSvgComponent {
|
|
1776
|
+
readonly src: import("@angular/core").InputSignal<string>;
|
|
1777
|
+
private readonly http;
|
|
1778
|
+
private readonly sanitizer;
|
|
1779
|
+
readonly svg: import("@angular/core").ResourceRef<import("@angular/platform-browser").SafeHtml | undefined>;
|
|
1780
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InlineSvgComponent, never>;
|
|
1781
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InlineSvgComponent, "inline-svg", never, {
|
|
1782
|
+
"src": {
|
|
1783
|
+
"alias": "src";
|
|
1784
|
+
"required": true;
|
|
1785
|
+
"isSignal": true;
|
|
1786
|
+
};
|
|
1787
|
+
}, {}, never, never, true, never>;
|
|
1104
1788
|
}
|
|
1105
|
-
interface IFormField {
|
|
1106
|
-
key: string;
|
|
1107
|
-
type: FormFieldType;
|
|
1108
|
-
label: string;
|
|
1109
|
-
placeholder?: string;
|
|
1110
|
-
required?: boolean;
|
|
1111
|
-
disabled?: boolean;
|
|
1112
|
-
fullWidth?: boolean;
|
|
1113
|
-
options?: IFormSelectOption[];
|
|
1114
|
-
minDate?: Date;
|
|
1115
|
-
maxDate?: Date;
|
|
1116
|
-
rows?: number;
|
|
1117
|
-
min?: number;
|
|
1118
|
-
max?: number;
|
|
1119
|
-
hint?: string;
|
|
1120
|
-
}
|
|
1121
|
-
|
|
1122
|
-
declare class BaseFormComponent {
|
|
1123
|
-
private readonly translateAdapter;
|
|
1124
|
-
private readonly router;
|
|
1125
|
-
private readonly messageService;
|
|
1126
|
-
readonly fields: _angular_core.InputSignal<IFormField[]>;
|
|
1127
|
-
readonly title: _angular_core.InputSignal<string>;
|
|
1128
|
-
readonly createTitle: _angular_core.InputSignal<string>;
|
|
1129
|
-
readonly editTitle: _angular_core.InputSignal<string>;
|
|
1130
|
-
readonly columns: _angular_core.InputSignal<1 | 2 | 3>;
|
|
1131
|
-
readonly submitLabel: _angular_core.InputSignal<string>;
|
|
1132
|
-
readonly cancelLabel: _angular_core.InputSignal<string>;
|
|
1133
|
-
readonly isLoading: _angular_core.InputSignal<boolean>;
|
|
1134
|
-
readonly isEditMode: _angular_core.InputSignal<boolean>;
|
|
1135
|
-
readonly initialValue: _angular_core.InputSignal<Record<string, unknown>>;
|
|
1136
|
-
readonly service: _angular_core.InputSignal<ApiResourceService<unknown, unknown> | null>;
|
|
1137
|
-
readonly editId: _angular_core.InputSignal<string | null>;
|
|
1138
|
-
readonly cancelRoute: _angular_core.InputSignal<string | string[] | null>;
|
|
1139
|
-
readonly navigateOnSuccess: _angular_core.InputSignal<string | string[] | null>;
|
|
1140
|
-
readonly mapToRequest: _angular_core.InputSignal<((data: Record<string, unknown>, editId: string | null) => unknown) | null>;
|
|
1141
|
-
readonly mapFromEntity: _angular_core.InputSignal<((entity: unknown) => Record<string, unknown>) | null>;
|
|
1142
|
-
readonly onSubmit: _angular_core.OutputEmitterRef<Record<string, unknown>>;
|
|
1143
|
-
readonly onCancel: _angular_core.OutputEmitterRef<void>;
|
|
1144
|
-
readonly onValueChange: _angular_core.OutputEmitterRef<Record<string, unknown>>;
|
|
1145
|
-
readonly fieldTemplates: _angular_core.Signal<readonly BaseFormTemplateDirective[]>;
|
|
1146
|
-
private readonly _formData;
|
|
1147
|
-
private readonly _submitted;
|
|
1148
|
-
private readonly _isLoadingInternal;
|
|
1149
|
-
private readonly _touchedFields;
|
|
1150
|
-
readonly formData: _angular_core.Signal<Record<string, unknown>>;
|
|
1151
|
-
readonly submitted: _angular_core.Signal<boolean>;
|
|
1152
|
-
readonly effectiveIsEditMode: _angular_core.Signal<boolean>;
|
|
1153
|
-
readonly effectiveIsLoading: _angular_core.Signal<boolean>;
|
|
1154
|
-
readonly isFormValid: _angular_core.Signal<boolean>;
|
|
1155
|
-
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
1156
|
-
readonly gridClass: _angular_core.Signal<"grid-cols-1" | "grid-cols-1 md:grid-cols-3" | "grid-cols-1 md:grid-cols-2">;
|
|
1157
|
-
constructor();
|
|
1158
|
-
private loadEntity;
|
|
1159
|
-
getFieldValue(key: string): unknown;
|
|
1160
|
-
setFieldValue(key: string, value: unknown): void;
|
|
1161
|
-
markFieldTouched(key: string): void;
|
|
1162
|
-
isFieldInvalid(field: IFormField): boolean;
|
|
1163
|
-
getFieldTemplate(key: string): TemplateRef<unknown> | null;
|
|
1164
|
-
handleSubmit(): Promise<void>;
|
|
1165
|
-
handleCancel(): void;
|
|
1166
|
-
reset(): void;
|
|
1167
|
-
t(key: string, vars?: Record<string, string | number>): string;
|
|
1168
|
-
private managedSubmit;
|
|
1169
|
-
private checkValidity;
|
|
1170
|
-
private navigateTo;
|
|
1171
|
-
private getDefaultValue;
|
|
1172
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseFormComponent, never>;
|
|
1173
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseFormComponent, "lib-base-form", never, { "fields": { "alias": "fields"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "createTitle": { "alias": "createTitle"; "required": false; "isSignal": true; }; "editTitle": { "alias": "editTitle"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": false; "isSignal": true; }; "initialValue": { "alias": "initialValue"; "required": false; "isSignal": true; }; "service": { "alias": "service"; "required": false; "isSignal": true; }; "editId": { "alias": "editId"; "required": false; "isSignal": true; }; "cancelRoute": { "alias": "cancelRoute"; "required": false; "isSignal": true; }; "navigateOnSuccess": { "alias": "navigateOnSuccess"; "required": false; "isSignal": true; }; "mapToRequest": { "alias": "mapToRequest"; "required": false; "isSignal": true; }; "mapFromEntity": { "alias": "mapFromEntity"; "required": false; "isSignal": true; }; }, { "onSubmit": "onSubmit"; "onCancel": "onCancel"; "onValueChange": "onValueChange"; }, ["fieldTemplates"], never, true, never>;
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
declare class BaseListTemplateDirective {
|
|
1177
|
-
readonly key: _angular_core.InputSignal<string>;
|
|
1178
|
-
readonly templateRef: TemplateRef<any>;
|
|
1179
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseListTemplateDirective, never>;
|
|
1180
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BaseListTemplateDirective, "ng-template[baseListTemplate]", never, { "key": { "alias": "baseListTemplate"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1181
|
-
}
|
|
1182
|
-
|
|
1183
|
-
type TableColumnType = 'text' | 'date' | 'tag' | 'boolean' | 'number' | 'custom';
|
|
1184
|
-
type ActionSeverity = 'success' | 'info' | 'warn' | 'danger' | 'secondary' | 'contrast';
|
|
1185
|
-
interface ITagConfig {
|
|
1186
|
-
label?: string;
|
|
1187
|
-
severity: 'success' | 'danger' | 'warn' | 'info' | 'secondary' | 'contrast';
|
|
1188
|
-
}
|
|
1189
|
-
interface ITableColumn {
|
|
1190
|
-
field: string;
|
|
1191
|
-
header: string;
|
|
1192
|
-
type?: TableColumnType;
|
|
1193
|
-
width?: string;
|
|
1194
|
-
minWidth?: string;
|
|
1195
|
-
align?: 'left' | 'center' | 'right';
|
|
1196
|
-
tagMap?: Record<string, ITagConfig>;
|
|
1197
|
-
dateFormat?: string;
|
|
1198
|
-
truncate?: number;
|
|
1199
|
-
hidden?: boolean;
|
|
1200
|
-
}
|
|
1201
|
-
interface ITableAction<T = unknown> {
|
|
1202
|
-
icon: string;
|
|
1203
|
-
tooltip?: string;
|
|
1204
|
-
severity?: ActionSeverity;
|
|
1205
|
-
show?: (item: T) => boolean;
|
|
1206
|
-
disabled?: (item: T) => boolean;
|
|
1207
|
-
handler: (item: T) => void;
|
|
1208
|
-
}
|
|
1209
|
-
|
|
1210
|
-
declare class BaseListComponent {
|
|
1211
|
-
private readonly translateAdapter;
|
|
1212
|
-
private readonly router;
|
|
1213
|
-
private readonly messageService;
|
|
1214
|
-
private readonly appConfig;
|
|
1215
|
-
private readonly confirmationService;
|
|
1216
|
-
readonly columns: _angular_core.InputSignal<ITableColumn[]>;
|
|
1217
|
-
readonly actions: _angular_core.InputSignal<ITableAction<unknown>[]>;
|
|
1218
|
-
readonly title: _angular_core.InputSignal<string>;
|
|
1219
|
-
readonly showCreateButton: _angular_core.InputSignal<boolean>;
|
|
1220
|
-
readonly searchable: _angular_core.InputSignal<boolean>;
|
|
1221
|
-
readonly pageSize: _angular_core.InputSignal<number>;
|
|
1222
|
-
readonly scrollHeight: _angular_core.InputSignal<string>;
|
|
1223
|
-
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
1224
|
-
readonly createButtonLabel: _angular_core.InputSignal<string>;
|
|
1225
|
-
readonly createButtonIcon: _angular_core.InputSignal<string>;
|
|
1226
|
-
readonly data: _angular_core.InputSignal<unknown[]>;
|
|
1227
|
-
readonly total: _angular_core.InputSignal<number>;
|
|
1228
|
-
readonly isLoading: _angular_core.InputSignal<boolean>;
|
|
1229
|
-
readonly service: _angular_core.InputSignal<ApiResourceService<unknown, unknown> | null>;
|
|
1230
|
-
readonly filter: _angular_core.InputSignal<IFilter>;
|
|
1231
|
-
readonly createRoute: _angular_core.InputSignal<string | null>;
|
|
1232
|
-
readonly editRoute: _angular_core.InputSignal<string | null>;
|
|
1233
|
-
readonly deleteConfirmField: _angular_core.InputSignal<string | null>;
|
|
1234
|
-
readonly deleteType: _angular_core.InputSignal<DeleteType>;
|
|
1235
|
-
readonly idField: _angular_core.InputSignal<string>;
|
|
1236
|
-
readonly canEdit: _angular_core.InputSignal<((item: unknown) => boolean) | null>;
|
|
1237
|
-
readonly canDelete: _angular_core.InputSignal<((item: unknown) => boolean) | null>;
|
|
1238
|
-
readonly onCreate: _angular_core.OutputEmitterRef<void>;
|
|
1239
|
-
readonly onLazyLoad: _angular_core.OutputEmitterRef<{
|
|
1240
|
-
first: number;
|
|
1241
|
-
rows: number;
|
|
1242
|
-
}>;
|
|
1243
|
-
readonly onSearch: _angular_core.OutputEmitterRef<string>;
|
|
1244
|
-
readonly columnTemplates: _angular_core.Signal<readonly BaseListTemplateDirective[]>;
|
|
1245
|
-
private readonly _first;
|
|
1246
|
-
private readonly _searchTerm;
|
|
1247
|
-
readonly first: _angular_core.Signal<number>;
|
|
1248
|
-
readonly searchTerm: _angular_core.Signal<string>;
|
|
1249
|
-
readonly effectiveData: _angular_core.Signal<unknown[]>;
|
|
1250
|
-
readonly effectiveTotal: _angular_core.Signal<number>;
|
|
1251
|
-
readonly effectiveIsLoading: _angular_core.Signal<boolean>;
|
|
1252
|
-
readonly effectiveActions: _angular_core.Signal<ITableAction<unknown>[]>;
|
|
1253
|
-
readonly visibleColumns: _angular_core.Signal<ITableColumn[]>;
|
|
1254
|
-
readonly columnCount: _angular_core.Signal<number>;
|
|
1255
|
-
readonly resolvedEmptyMessage: _angular_core.Signal<string>;
|
|
1256
|
-
readonly resolvedCreateLabel: _angular_core.Signal<string>;
|
|
1257
|
-
handleLazyLoad(event: {
|
|
1258
|
-
first?: number | null;
|
|
1259
|
-
rows?: number | null;
|
|
1260
|
-
}): void;
|
|
1261
|
-
onSearchChange(value: string): void;
|
|
1262
|
-
handleCreate(): void;
|
|
1263
|
-
private handleEditItem;
|
|
1264
|
-
private handleDeleteItem;
|
|
1265
|
-
getFieldValue(item: unknown, field: string): unknown;
|
|
1266
|
-
getFieldValueAsString(item: unknown, field: string): string;
|
|
1267
|
-
getTagConfig(col: ITableColumn, value: unknown): ITagConfig | null;
|
|
1268
|
-
getColumnTemplate(field: string): TemplateRef<unknown> | null;
|
|
1269
|
-
truncateText(value: unknown, limit?: number): string;
|
|
1270
|
-
getCellClass(col: ITableColumn): string;
|
|
1271
|
-
t(key: string, vars?: Record<string, string | number>): string;
|
|
1272
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseListComponent, never>;
|
|
1273
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseListComponent, "lib-base-list", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showCreateButton": { "alias": "showCreateButton"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "scrollHeight": { "alias": "scrollHeight"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "createButtonLabel": { "alias": "createButtonLabel"; "required": false; "isSignal": true; }; "createButtonIcon": { "alias": "createButtonIcon"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "service": { "alias": "service"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "createRoute": { "alias": "createRoute"; "required": false; "isSignal": true; }; "editRoute": { "alias": "editRoute"; "required": false; "isSignal": true; }; "deleteConfirmField": { "alias": "deleteConfirmField"; "required": false; "isSignal": true; }; "deleteType": { "alias": "deleteType"; "required": false; "isSignal": true; }; "idField": { "alias": "idField"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "canDelete": { "alias": "canDelete"; "required": false; "isSignal": true; }; }, { "onCreate": "onCreate"; "onLazyLoad": "onLazyLoad"; "onSearch": "onSearch"; }, ["columnTemplates"], never, true, never>;
|
|
1274
|
-
}
|
|
1275
|
-
|
|
1276
|
-
declare class FileSelectorDialogComponent {
|
|
1277
|
-
private readonly destroyRef;
|
|
1278
|
-
private readonly translateAdapter;
|
|
1279
|
-
readonly fileProvider: _flusys_ng_shared.IFileProvider | null;
|
|
1280
|
-
private abortController;
|
|
1281
|
-
private searchDebounceTimer;
|
|
1282
|
-
readonly header: _angular_core.InputSignal<string | undefined>;
|
|
1283
|
-
readonly acceptTypes: _angular_core.InputSignal<string[]>;
|
|
1284
|
-
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
1285
|
-
readonly dialogHeader: _angular_core.Signal<string>;
|
|
1286
|
-
readonly maxSelection: _angular_core.InputSignal<number>;
|
|
1287
|
-
readonly pageSize: _angular_core.InputSignal<number>;
|
|
1288
|
-
readonly folderId: _angular_core.InputSignal<string | undefined>;
|
|
1289
|
-
readonly withUploader: _angular_core.InputSignal<boolean>;
|
|
1290
|
-
readonly visible: _angular_core.ModelSignal<boolean>;
|
|
1291
|
-
readonly fileSelected: _angular_core.OutputEmitterRef<IFileBasicInfo>;
|
|
1292
|
-
readonly filesSelected: _angular_core.OutputEmitterRef<IFileBasicInfo[]>;
|
|
1293
|
-
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
1294
|
-
readonly onError: _angular_core.OutputEmitterRef<Error>;
|
|
1295
|
-
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
1296
|
-
readonly files: _angular_core.WritableSignal<IFileBasicInfo[]>;
|
|
1297
|
-
readonly selectedFiles: _angular_core.WritableSignal<IFileBasicInfo[]>;
|
|
1298
|
-
readonly total: _angular_core.WritableSignal<number | undefined>;
|
|
1299
|
-
readonly pagination: _angular_core.WritableSignal<IPagination>;
|
|
1300
|
-
readonly searchTerm: _angular_core.WritableSignal<string>;
|
|
1301
|
-
readonly folders: _angular_core.WritableSignal<IFolderBasicInfo[]>;
|
|
1302
|
-
readonly selectedFolderId: _angular_core.WritableSignal<string | null>;
|
|
1303
|
-
readonly selectedFolderObject: _angular_core.WritableSignal<IFolderBasicInfo | null>;
|
|
1304
|
-
readonly foldersLoading: _angular_core.WritableSignal<boolean>;
|
|
1305
|
-
readonly foldersPagination: _angular_core.WritableSignal<IPagination>;
|
|
1306
|
-
readonly foldersTotal: _angular_core.WritableSignal<number | undefined>;
|
|
1307
|
-
readonly storageConfigs: _angular_core.WritableSignal<IStorageConfigBasicInfo[]>;
|
|
1308
|
-
readonly selectedStorageConfigId: _angular_core.WritableSignal<string | null>;
|
|
1309
|
-
readonly selectedStorageConfigObject: _angular_core.WritableSignal<IStorageConfigBasicInfo | null>;
|
|
1310
|
-
readonly storageConfigsLoading: _angular_core.WritableSignal<boolean>;
|
|
1311
|
-
readonly storageConfigsPagination: _angular_core.WritableSignal<IPagination>;
|
|
1312
|
-
readonly storageConfigsTotal: _angular_core.WritableSignal<number | undefined>;
|
|
1313
|
-
readonly effectiveStorageConfigId: _angular_core.Signal<string | undefined>;
|
|
1314
|
-
readonly uploadFileFn: (file: File, options?: IFileUploadOptions) => rxjs.Observable<_flusys_ng_shared.ISingleResponse<IUploadedFile>>;
|
|
1315
|
-
readonly uploadMultipleFilesFn: ((files: File[], options?: IFileUploadOptions) => rxjs.Observable<_flusys_ng_shared.ISingleResponse<IUploadedFile[]>>) | undefined;
|
|
1316
|
-
constructor();
|
|
1317
|
-
onSearchChange(value: string): void;
|
|
1318
|
-
onScroll(event: Event): void;
|
|
1319
|
-
toggleSelection(file: IFileBasicInfo): void;
|
|
1320
|
-
isSelected(file: IFileBasicInfo): boolean;
|
|
1321
|
-
isFileAllowed(file: IFileBasicInfo): boolean;
|
|
1322
|
-
isImage(file: IFileBasicInfo): boolean;
|
|
1323
|
-
getFileIcon(file: IFileBasicInfo): string;
|
|
1324
|
-
formatSize(size: string): string;
|
|
1325
|
-
onCancel(): void;
|
|
1326
|
-
onConfirm(): void;
|
|
1327
|
-
onDialogHide(): void;
|
|
1328
|
-
onFolderChange(folderId: string | null): void;
|
|
1329
|
-
onFolderSearch(event: {
|
|
1330
|
-
filter: string;
|
|
1331
|
-
}): void;
|
|
1332
|
-
loadFolders(search?: string): Promise<void>;
|
|
1333
|
-
onStorageConfigChange(configId: string | null): void;
|
|
1334
|
-
onStorageConfigSearch(event: {
|
|
1335
|
-
filter: string;
|
|
1336
|
-
}): void;
|
|
1337
|
-
loadStorageConfigs(search?: string): Promise<void>;
|
|
1338
|
-
onFileUploaded(uploadedFile: IUploadedFile): void;
|
|
1339
|
-
private resetState;
|
|
1340
|
-
private fetchFiles;
|
|
1341
|
-
private t;
|
|
1342
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileSelectorDialogComponent, never>;
|
|
1343
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileSelectorDialogComponent, "lib-file-selector-dialog", never, { "header": { "alias": "header"; "required": false; "isSignal": true; }; "acceptTypes": { "alias": "acceptTypes"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxSelection": { "alias": "maxSelection"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "folderId": { "alias": "folderId"; "required": false; "isSignal": true; }; "withUploader": { "alias": "withUploader"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; "fileSelected": "fileSelected"; "filesSelected": "filesSelected"; "closed": "closed"; "onError": "onError"; }, never, never, true, never>;
|
|
1344
|
-
}
|
|
1345
|
-
|
|
1346
|
-
declare class FileUploaderComponent {
|
|
1347
|
-
private readonly messageService;
|
|
1348
|
-
private readonly translateAdapter;
|
|
1349
|
-
private readonly fileProvider;
|
|
1350
|
-
readonly uploadFile: _angular_core.InputSignal<UploadFileFn | undefined>;
|
|
1351
|
-
readonly uploadMultipleFiles: _angular_core.InputSignal<UploadMultipleFilesFn | undefined>;
|
|
1352
|
-
readonly hasUploadCapability: _angular_core.Signal<boolean>;
|
|
1353
|
-
private getUploadFn;
|
|
1354
|
-
private getUploadMultipleFn;
|
|
1355
|
-
readonly acceptTypes: _angular_core.InputSignal<string[]>;
|
|
1356
|
-
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
1357
|
-
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
1358
|
-
readonly maxSizeMb: _angular_core.InputSignal<number>;
|
|
1359
|
-
readonly uploadOptions: _angular_core.InputSignal<IFileUploadOptions>;
|
|
1360
|
-
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1361
|
-
readonly showPreview: _angular_core.InputSignal<boolean>;
|
|
1362
|
-
readonly autoUpload: _angular_core.InputSignal<boolean>;
|
|
1363
|
-
readonly fileUploaded: _angular_core.OutputEmitterRef<IUploadedFile>;
|
|
1364
|
-
readonly filesUploaded: _angular_core.OutputEmitterRef<IUploadedFile[]>;
|
|
1365
|
-
readonly onError: _angular_core.OutputEmitterRef<Error>;
|
|
1366
|
-
readonly fileSelected: _angular_core.OutputEmitterRef<File[]>;
|
|
1367
|
-
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
1368
|
-
readonly isDragOver: _angular_core.WritableSignal<boolean>;
|
|
1369
|
-
readonly uploadProgress: _angular_core.WritableSignal<number>;
|
|
1370
|
-
readonly uploadingFileName: _angular_core.WritableSignal<string>;
|
|
1371
|
-
readonly selectedFiles: _angular_core.WritableSignal<File[]>;
|
|
1372
|
-
readonly acceptString: _angular_core.Signal<string>;
|
|
1373
|
-
readonly acceptTypesDisplay: _angular_core.Signal<string>;
|
|
1374
|
-
onDragOver(event: DragEvent): void;
|
|
1375
|
-
onDragLeave(event: DragEvent): void;
|
|
1376
|
-
onDrop(event: DragEvent): void;
|
|
1377
|
-
onFileSelected(event: Event): void;
|
|
1378
|
-
private handleFiles;
|
|
1379
|
-
removeFile(file: File): void;
|
|
1380
|
-
uploadFiles(files?: File[]): Promise<void>;
|
|
1381
|
-
private uploadBatch;
|
|
1382
|
-
private uploadSequential;
|
|
1383
|
-
getFileIcon(file: File): string;
|
|
1384
|
-
formatSize(bytes: number): string;
|
|
1385
|
-
private t;
|
|
1386
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploaderComponent, never>;
|
|
1387
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUploaderComponent, "lib-file-uploader", never, { "uploadFile": { "alias": "uploadFile"; "required": false; "isSignal": true; }; "uploadMultipleFiles": { "alias": "uploadMultipleFiles"; "required": false; "isSignal": true; }; "acceptTypes": { "alias": "acceptTypes"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "maxSizeMb": { "alias": "maxSizeMb"; "required": false; "isSignal": true; }; "uploadOptions": { "alias": "uploadOptions"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showPreview": { "alias": "showPreview"; "required": false; "isSignal": true; }; "autoUpload": { "alias": "autoUpload"; "required": false; "isSignal": true; }; }, { "fileUploaded": "fileUploaded"; "filesUploaded": "filesUploaded"; "onError": "onError"; "fileSelected": "fileSelected"; }, never, never, true, never>;
|
|
1388
|
-
}
|
|
1389
|
-
|
|
1390
|
-
declare class IconComponent {
|
|
1391
|
-
readonly icon: _angular_core.InputSignal<string>;
|
|
1392
|
-
readonly iconType: _angular_core.InputSignal<IconTypeEnum | undefined>;
|
|
1393
|
-
protected readonly IconTypeEnum: typeof IconTypeEnum;
|
|
1394
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconComponent, never>;
|
|
1395
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconComponent, "lib-icon", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "iconType": { "alias": "iconType"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1396
|
-
}
|
|
1397
|
-
|
|
1398
|
-
declare class InlineSvgComponent {
|
|
1399
|
-
readonly src: _angular_core.InputSignal<string>;
|
|
1400
|
-
private readonly http;
|
|
1401
|
-
private readonly sanitizer;
|
|
1402
|
-
readonly svg: _angular_core.ResourceRef<_angular_platform_browser.SafeHtml | undefined>;
|
|
1403
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InlineSvgComponent, never>;
|
|
1404
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InlineSvgComponent, "inline-svg", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1405
|
-
}
|
|
1406
|
-
|
|
1407
1789
|
/**
|
|
1408
1790
|
* Lazy-loading multi-select component with search, pagination, and select-all.
|
|
1409
1791
|
*
|
|
@@ -1412,60 +1794,109 @@ declare class InlineSvgComponent {
|
|
|
1412
1794
|
* - Reactive forms: `[formControl]="ctrl"` or `formControlName="field"`
|
|
1413
1795
|
* - Signal forms: `[formField]="formTree.field"`
|
|
1414
1796
|
*/
|
|
1415
|
-
declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null> implements OnDestroy {
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1797
|
+
export declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null> implements OnDestroy {
|
|
1798
|
+
private readonly document;
|
|
1799
|
+
private readonly appRef;
|
|
1800
|
+
private readonly overlayStack;
|
|
1801
|
+
private readonly translateAdapter;
|
|
1802
|
+
private readonly onDocumentClickBound;
|
|
1803
|
+
readonly pSelectRef: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
|
|
1804
|
+
readonly overlayTemplate: import("@angular/core").Signal<TemplateRef<unknown>>;
|
|
1805
|
+
private overlayViewRef;
|
|
1806
|
+
private detachOverlayPosition;
|
|
1807
|
+
readonly placeHolder: import("@angular/core").InputSignal<string>;
|
|
1808
|
+
readonly showClear: import("@angular/core").InputSignal<boolean>;
|
|
1809
|
+
readonly displayPlaceholder: import("@angular/core").Signal<string>;
|
|
1810
|
+
readonly isEditMode: import("@angular/core").InputSignal<boolean>;
|
|
1811
|
+
readonly isLoading: import("@angular/core").InputSignal<boolean>;
|
|
1812
|
+
readonly total: import("@angular/core").InputSignal<number | undefined>;
|
|
1813
|
+
readonly pagination: import("@angular/core").InputSignal<IPagination>;
|
|
1814
|
+
readonly selectDataList: import("@angular/core").InputSignal<IDropDown[]>;
|
|
1815
|
+
/**
|
|
1816
|
+
* Full option objects for the currently selected values, supplied by the
|
|
1817
|
+
* caller (or a subclass like UserMultiSelectComponent). Pinned into
|
|
1818
|
+
* `mergedDataList` (deduped by `value`) so chips/labels/checkboxes survive
|
|
1819
|
+
* a later search/page reload that replaces `selectDataList()` without the
|
|
1820
|
+
* selection having changed. This component renders its own overlay list
|
|
1821
|
+
* (it does not build on f-multiselect), so the merge has to happen here.
|
|
1822
|
+
*/
|
|
1823
|
+
readonly selectedObjects: import("@angular/core").InputSignal<IDropDown[]>;
|
|
1824
|
+
readonly value: import("@angular/core").ModelSignal<string[] | null>;
|
|
1825
|
+
private readonly selectedObjectEntries;
|
|
1826
|
+
readonly mergedDataList: import("@angular/core").Signal<IDropDown[]>;
|
|
1827
|
+
readonly onSearch: import("@angular/core").OutputEmitterRef<string>;
|
|
1828
|
+
readonly onPagination: import("@angular/core").OutputEmitterRef<IPagination>;
|
|
1829
|
+
readonly searchTerm: import("@angular/core").WritableSignal<string>;
|
|
1830
|
+
readonly openOptions: import("@angular/core").WritableSignal<boolean>;
|
|
1831
|
+
readonly selectedValueDisplay: import("@angular/core").Signal<string>;
|
|
1832
|
+
readonly hasSelectedValues: import("@angular/core").Signal<boolean>;
|
|
1833
|
+
readonly isSelectAll: import("@angular/core").Signal<boolean>;
|
|
1834
|
+
constructor();
|
|
1835
|
+
ngOnDestroy(): void;
|
|
1836
|
+
onScroll(event: Event): void;
|
|
1837
|
+
onSelectClick(): void;
|
|
1838
|
+
private openOverlay;
|
|
1839
|
+
private closeOverlay;
|
|
1840
|
+
onOverlayClick(event: Event): void;
|
|
1841
|
+
private handleDocumentClick;
|
|
1842
|
+
isSelected(data: IDropDown): boolean;
|
|
1843
|
+
selectValue(event: CheckboxChangeEvent, option: IDropDown): void;
|
|
1844
|
+
changeSelectAll(event: CheckboxChangeEvent): void;
|
|
1845
|
+
clear(event: Event): void;
|
|
1846
|
+
private t;
|
|
1847
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LazyMultiSelectComponent, never>;
|
|
1848
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LazyMultiSelectComponent, "lib-lazy-multi-select", never, {
|
|
1849
|
+
"placeHolder": {
|
|
1850
|
+
"alias": "placeHolder";
|
|
1851
|
+
"required": false;
|
|
1852
|
+
"isSignal": true;
|
|
1853
|
+
};
|
|
1854
|
+
"showClear": {
|
|
1855
|
+
"alias": "showClear";
|
|
1856
|
+
"required": false;
|
|
1857
|
+
"isSignal": true;
|
|
1858
|
+
};
|
|
1859
|
+
"isEditMode": {
|
|
1860
|
+
"alias": "isEditMode";
|
|
1861
|
+
"required": true;
|
|
1862
|
+
"isSignal": true;
|
|
1863
|
+
};
|
|
1864
|
+
"isLoading": {
|
|
1865
|
+
"alias": "isLoading";
|
|
1866
|
+
"required": true;
|
|
1867
|
+
"isSignal": true;
|
|
1868
|
+
};
|
|
1869
|
+
"total": {
|
|
1870
|
+
"alias": "total";
|
|
1871
|
+
"required": true;
|
|
1872
|
+
"isSignal": true;
|
|
1873
|
+
};
|
|
1874
|
+
"pagination": {
|
|
1875
|
+
"alias": "pagination";
|
|
1876
|
+
"required": true;
|
|
1877
|
+
"isSignal": true;
|
|
1878
|
+
};
|
|
1879
|
+
"selectDataList": {
|
|
1880
|
+
"alias": "selectDataList";
|
|
1881
|
+
"required": true;
|
|
1882
|
+
"isSignal": true;
|
|
1883
|
+
};
|
|
1884
|
+
"selectedObjects": {
|
|
1885
|
+
"alias": "selectedObjects";
|
|
1886
|
+
"required": false;
|
|
1887
|
+
"isSignal": true;
|
|
1888
|
+
};
|
|
1889
|
+
"value": {
|
|
1890
|
+
"alias": "value";
|
|
1891
|
+
"required": false;
|
|
1892
|
+
"isSignal": true;
|
|
1893
|
+
};
|
|
1894
|
+
}, {
|
|
1895
|
+
"value": "valueChange";
|
|
1896
|
+
"onSearch": "onSearch";
|
|
1897
|
+
"onPagination": "onPagination";
|
|
1898
|
+
}, never, never, true, never>;
|
|
1899
|
+
}
|
|
1469
1900
|
/**
|
|
1470
1901
|
* Lazy-loading single select component with search and pagination.
|
|
1471
1902
|
*
|
|
@@ -1474,56 +1905,180 @@ declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null>
|
|
|
1474
1905
|
* - Reactive forms: `[formControl]="ctrl"` or `formControlName="field"`
|
|
1475
1906
|
* - Signal forms: `[formField]="formTree.field"`
|
|
1476
1907
|
*/
|
|
1477
|
-
declare class LazySelectComponent extends BaseFormControl<string | null> {
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1908
|
+
export declare class LazySelectComponent extends BaseFormControl<string | null> {
|
|
1909
|
+
private readonly destroyRef;
|
|
1910
|
+
private readonly translateAdapter;
|
|
1911
|
+
private readonly onScrollBound;
|
|
1912
|
+
private scrollTargetEl;
|
|
1913
|
+
private isDestroyed;
|
|
1914
|
+
readonly scrollContainer: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
|
|
1915
|
+
readonly placeHolder: import("@angular/core").InputSignal<string>;
|
|
1916
|
+
readonly showClear: import("@angular/core").InputSignal<boolean>;
|
|
1917
|
+
readonly displayPlaceholder: import("@angular/core").Signal<string>;
|
|
1918
|
+
readonly optionLabel: import("@angular/core").InputSignal<string>;
|
|
1919
|
+
readonly optionValue: import("@angular/core").InputSignal<string>;
|
|
1920
|
+
readonly isEditMode: import("@angular/core").InputSignal<boolean>;
|
|
1921
|
+
readonly isLoading: import("@angular/core").InputSignal<boolean>;
|
|
1922
|
+
readonly total: import("@angular/core").InputSignal<number | undefined>;
|
|
1923
|
+
readonly pagination: import("@angular/core").InputSignal<IPagination>;
|
|
1924
|
+
readonly selectDataList: import("@angular/core").InputSignal<IDropDown[]>;
|
|
1925
|
+
/**
|
|
1926
|
+
* Full option object for the current value, supplied by the caller (or a
|
|
1927
|
+
* subclass like UserSelectComponent). Forwarded to f-select's own
|
|
1928
|
+
* `selectedObject` input so the label survives a later search/page reload
|
|
1929
|
+
* that replaces `selectDataList()` without the value having changed.
|
|
1930
|
+
*/
|
|
1931
|
+
readonly selectedObject: import("@angular/core").InputSignal<unknown>;
|
|
1932
|
+
readonly value: import("@angular/core").ModelSignal<string | null>;
|
|
1933
|
+
readonly onSearch: import("@angular/core").OutputEmitterRef<string>;
|
|
1934
|
+
readonly onPagination: import("@angular/core").OutputEmitterRef<IPagination>;
|
|
1935
|
+
readonly searchTerm: import("@angular/core").WritableSignal<string>;
|
|
1936
|
+
readonly isPanelShow: import("@angular/core").WritableSignal<boolean>;
|
|
1937
|
+
constructor();
|
|
1938
|
+
onScroll(event: Event): void;
|
|
1939
|
+
showPanel(): void;
|
|
1940
|
+
private t;
|
|
1941
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LazySelectComponent, never>;
|
|
1942
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LazySelectComponent, "lib-lazy-select", never, {
|
|
1943
|
+
"placeHolder": {
|
|
1944
|
+
"alias": "placeHolder";
|
|
1945
|
+
"required": false;
|
|
1946
|
+
"isSignal": true;
|
|
1947
|
+
};
|
|
1948
|
+
"showClear": {
|
|
1949
|
+
"alias": "showClear";
|
|
1950
|
+
"required": false;
|
|
1951
|
+
"isSignal": true;
|
|
1952
|
+
};
|
|
1953
|
+
"optionLabel": {
|
|
1954
|
+
"alias": "optionLabel";
|
|
1955
|
+
"required": true;
|
|
1956
|
+
"isSignal": true;
|
|
1957
|
+
};
|
|
1958
|
+
"optionValue": {
|
|
1959
|
+
"alias": "optionValue";
|
|
1960
|
+
"required": true;
|
|
1961
|
+
"isSignal": true;
|
|
1962
|
+
};
|
|
1963
|
+
"isEditMode": {
|
|
1964
|
+
"alias": "isEditMode";
|
|
1965
|
+
"required": true;
|
|
1966
|
+
"isSignal": true;
|
|
1967
|
+
};
|
|
1968
|
+
"isLoading": {
|
|
1969
|
+
"alias": "isLoading";
|
|
1970
|
+
"required": true;
|
|
1971
|
+
"isSignal": true;
|
|
1972
|
+
};
|
|
1973
|
+
"total": {
|
|
1974
|
+
"alias": "total";
|
|
1975
|
+
"required": true;
|
|
1976
|
+
"isSignal": true;
|
|
1977
|
+
};
|
|
1978
|
+
"pagination": {
|
|
1979
|
+
"alias": "pagination";
|
|
1980
|
+
"required": true;
|
|
1981
|
+
"isSignal": true;
|
|
1982
|
+
};
|
|
1983
|
+
"selectDataList": {
|
|
1984
|
+
"alias": "selectDataList";
|
|
1985
|
+
"required": true;
|
|
1986
|
+
"isSignal": true;
|
|
1987
|
+
};
|
|
1988
|
+
"selectedObject": {
|
|
1989
|
+
"alias": "selectedObject";
|
|
1990
|
+
"required": false;
|
|
1991
|
+
"isSignal": true;
|
|
1992
|
+
};
|
|
1993
|
+
"value": {
|
|
1994
|
+
"alias": "value";
|
|
1995
|
+
"required": false;
|
|
1996
|
+
"isSignal": true;
|
|
1997
|
+
};
|
|
1998
|
+
}, {
|
|
1999
|
+
"value": "valueChange";
|
|
2000
|
+
"onSearch": "onSearch";
|
|
2001
|
+
"onPagination": "onPagination";
|
|
2002
|
+
}, never, never, true, never>;
|
|
1520
2003
|
}
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
2004
|
+
/**
|
|
2005
|
+
* Edits an AND / OR rule of permission codes (`ILogicNode`): a group whose rows are permissions
|
|
2006
|
+
* (picked with `lib-action-select` in `scope`) or nested groups, up to MAX_PERMISSION_LOGIC_DEPTH levels.
|
|
2007
|
+
*/
|
|
2008
|
+
export declare class PermissionLogicComponent {
|
|
2009
|
+
private readonly translate;
|
|
2010
|
+
readonly group: import("@angular/core").InputSignal<IGroupNode>;
|
|
2011
|
+
readonly depth: import("@angular/core").InputSignal<number>;
|
|
2012
|
+
readonly scope: import("@angular/core").InputSignal<ActionScope>;
|
|
2013
|
+
/** Shown while the outer group holds nothing, e.g. what an empty rule falls back to. */
|
|
2014
|
+
readonly emptyText: import("@angular/core").InputSignal<string>;
|
|
2015
|
+
readonly groupChange: import("@angular/core").OutputEmitterRef<IGroupNode>;
|
|
2016
|
+
readonly remove: import("@angular/core").OutputEmitterRef<void>;
|
|
2017
|
+
readonly maxDepth = 5;
|
|
2018
|
+
readonly emptyGroup: (operator?: IGroupNode["operator"]) => IGroupNode;
|
|
2019
|
+
readonly operators: import("@angular/core").Signal<{
|
|
2020
|
+
value: "AND" | "OR";
|
|
2021
|
+
label: string;
|
|
2022
|
+
}[]>;
|
|
2023
|
+
setOperator(operator: IGroupNode['operator']): void;
|
|
2024
|
+
setCode(index: number, code: string | null): void;
|
|
2025
|
+
setChild(index: number, child: ILogicNode): void;
|
|
2026
|
+
removeChild(index: number): void;
|
|
2027
|
+
add(child: ILogicNode): void;
|
|
2028
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PermissionLogicComponent, never>;
|
|
2029
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PermissionLogicComponent, "lib-permission-logic", never, {
|
|
2030
|
+
"group": {
|
|
2031
|
+
"alias": "group";
|
|
2032
|
+
"required": true;
|
|
2033
|
+
"isSignal": true;
|
|
2034
|
+
};
|
|
2035
|
+
"depth": {
|
|
2036
|
+
"alias": "depth";
|
|
2037
|
+
"required": false;
|
|
2038
|
+
"isSignal": true;
|
|
2039
|
+
};
|
|
2040
|
+
"scope": {
|
|
2041
|
+
"alias": "scope";
|
|
2042
|
+
"required": false;
|
|
2043
|
+
"isSignal": true;
|
|
2044
|
+
};
|
|
2045
|
+
"emptyText": {
|
|
2046
|
+
"alias": "emptyText";
|
|
2047
|
+
"required": false;
|
|
2048
|
+
"isSignal": true;
|
|
2049
|
+
};
|
|
2050
|
+
}, {
|
|
2051
|
+
"groupChange": "groupChange";
|
|
2052
|
+
"remove": "remove";
|
|
2053
|
+
}, never, never, true, never>;
|
|
2054
|
+
}
|
|
2055
|
+
/** Groups nested in a permission rule, the outer one included. Mirrors the server. */
|
|
2056
|
+
export declare const MAX_PERMISSION_LOGIC_DEPTH = 5;
|
|
2057
|
+
export declare const emptyPermissionGroup: (operator?: IGroupNode["operator"]) => IGroupNode;
|
|
2058
|
+
/** A stored rule as the group the builder edits: a single permission becomes a group holding it. */
|
|
2059
|
+
export declare function asPermissionGroup(logic: ILogicNode | null | undefined): IGroupNode;
|
|
2060
|
+
/** Whether a rule names no permission at all. */
|
|
2061
|
+
export declare function isEmptyPermissionLogic(logic: ILogicNode | null | undefined): boolean;
|
|
2062
|
+
/** Whether a rule still has a permission row without a code, or a group without anything in it. */
|
|
2063
|
+
export declare function hasIncompletePermission(logic: ILogicNode): boolean;
|
|
2064
|
+
export interface RouterTabItem {
|
|
2065
|
+
id: string | number;
|
|
2066
|
+
label: string;
|
|
2067
|
+
icon?: string;
|
|
2068
|
+
route: string | unknown[];
|
|
2069
|
+
routerLinkActiveExact?: boolean;
|
|
2070
|
+
}
|
|
2071
|
+
export declare class RouterTabsComponent {
|
|
2072
|
+
readonly tabs: import("@angular/core").InputSignal<RouterTabItem[]>;
|
|
2073
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RouterTabsComponent, never>;
|
|
2074
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RouterTabsComponent, "lib-router-tabs", never, {
|
|
2075
|
+
"tabs": {
|
|
2076
|
+
"alias": "tabs";
|
|
2077
|
+
"required": false;
|
|
2078
|
+
"isSignal": true;
|
|
2079
|
+
};
|
|
2080
|
+
}, {}, never, never, true, never>;
|
|
1525
2081
|
}
|
|
1526
|
-
|
|
1527
2082
|
/**
|
|
1528
2083
|
* Base class for user selection components.
|
|
1529
2084
|
* Provides shared user loading, pagination, and search functionality.
|
|
@@ -1531,52 +2086,84 @@ declare class RouterTabsComponent {
|
|
|
1531
2086
|
* Subclasses must implement:
|
|
1532
2087
|
* - `setupValueEffect()` to track value changes and emit selection events
|
|
1533
2088
|
*/
|
|
1534
|
-
declare abstract class BaseUserSelectComponent {
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
2089
|
+
export declare abstract class BaseUserSelectComponent {
|
|
2090
|
+
protected readonly destroyRef: DestroyRef;
|
|
2091
|
+
protected readonly injector: Injector;
|
|
2092
|
+
protected readonly userProvider: IUserProvider;
|
|
2093
|
+
protected readonly translateAdapter: TranslateService;
|
|
2094
|
+
protected abortController: AbortController | null;
|
|
2095
|
+
readonly loadUsers: import("@angular/core").InputSignal<LoadUsersFn | undefined>;
|
|
2096
|
+
readonly placeHolder: import("@angular/core").InputSignal<string>;
|
|
2097
|
+
readonly isEditMode: import("@angular/core").InputSignal<boolean>;
|
|
2098
|
+
readonly filterActive: import("@angular/core").InputSignal<boolean>;
|
|
2099
|
+
readonly additionalFilters: import("@angular/core").InputSignal<Record<string, unknown>>;
|
|
2100
|
+
readonly pageSize: import("@angular/core").InputSignal<number>;
|
|
2101
|
+
readonly onError: import("@angular/core").OutputEmitterRef<Error>;
|
|
2102
|
+
readonly isLoading: import("@angular/core").WritableSignal<boolean>;
|
|
2103
|
+
readonly users: import("@angular/core").WritableSignal<IUserBasicInfo[]>;
|
|
2104
|
+
readonly total: import("@angular/core").WritableSignal<number | undefined>;
|
|
2105
|
+
readonly pagination: import("@angular/core").WritableSignal<IPagination>;
|
|
2106
|
+
readonly searchTerm: import("@angular/core").WritableSignal<string>;
|
|
2107
|
+
readonly dropdownUsers: import("@angular/core").Signal<IDropDown[]>;
|
|
2108
|
+
private readonly _knownUsers;
|
|
2109
|
+
protected toDropDown(user: IUserBasicInfo): IDropDown;
|
|
2110
|
+
/** Resolves a single previously-seen user id, even if it's no longer in `users()`. */
|
|
2111
|
+
protected resolveKnownUser(id: string | null | undefined): IDropDown | null;
|
|
2112
|
+
/** Resolves multiple previously-seen user ids, even if no longer in `users()`. */
|
|
2113
|
+
protected resolveKnownUsers(ids: string[]): IDropDown[];
|
|
2114
|
+
/** Same as resolveKnownUser, but returns the raw IUserBasicInfo (for outputs like userSelected). */
|
|
2115
|
+
protected resolveKnownUserRaw(id: string | null | undefined): IUserBasicInfo | null;
|
|
2116
|
+
/** Same as resolveKnownUsers, but returns the raw IUserBasicInfo[] (for outputs like usersSelected). */
|
|
2117
|
+
protected resolveKnownUsersRaw(ids: string[]): IUserBasicInfo[];
|
|
2118
|
+
private rememberUsers;
|
|
2119
|
+
readonly displayPlaceholder: import("@angular/core").Signal<string>;
|
|
2120
|
+
constructor();
|
|
2121
|
+
/** Setup effect to track value changes and emit selection events */
|
|
2122
|
+
protected abstract setupValueEffect(): void;
|
|
2123
|
+
handleSearch(search: string): void;
|
|
2124
|
+
handlePagination(pagination: IPagination): void;
|
|
2125
|
+
/** Reload users (useful when filters change externally) */
|
|
2126
|
+
reload(): void;
|
|
2127
|
+
protected fetchUsers(append?: boolean): Promise<void>;
|
|
2128
|
+
/** Load users from USER_PROVIDER with active filter */
|
|
2129
|
+
private loadUsersFromProvider;
|
|
2130
|
+
protected t(key: string, variables?: Record<string, string | number>): string;
|
|
2131
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseUserSelectComponent, never>;
|
|
2132
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseUserSelectComponent, never, never, {
|
|
2133
|
+
"loadUsers": {
|
|
2134
|
+
"alias": "loadUsers";
|
|
2135
|
+
"required": false;
|
|
2136
|
+
"isSignal": true;
|
|
2137
|
+
};
|
|
2138
|
+
"placeHolder": {
|
|
2139
|
+
"alias": "placeHolder";
|
|
2140
|
+
"required": false;
|
|
2141
|
+
"isSignal": true;
|
|
2142
|
+
};
|
|
2143
|
+
"isEditMode": {
|
|
2144
|
+
"alias": "isEditMode";
|
|
2145
|
+
"required": true;
|
|
2146
|
+
"isSignal": true;
|
|
2147
|
+
};
|
|
2148
|
+
"filterActive": {
|
|
2149
|
+
"alias": "filterActive";
|
|
2150
|
+
"required": false;
|
|
2151
|
+
"isSignal": true;
|
|
2152
|
+
};
|
|
2153
|
+
"additionalFilters": {
|
|
2154
|
+
"alias": "additionalFilters";
|
|
2155
|
+
"required": false;
|
|
2156
|
+
"isSignal": true;
|
|
2157
|
+
};
|
|
2158
|
+
"pageSize": {
|
|
2159
|
+
"alias": "pageSize";
|
|
2160
|
+
"required": false;
|
|
2161
|
+
"isSignal": true;
|
|
2162
|
+
};
|
|
2163
|
+
}, {
|
|
2164
|
+
"onError": "onError";
|
|
2165
|
+
}, never, never, true, never>;
|
|
2166
|
+
}
|
|
1580
2167
|
/**
|
|
1581
2168
|
* User Multi-Select Component - Multiple user selection with lazy loading.
|
|
1582
2169
|
*
|
|
@@ -1605,16 +2192,29 @@ declare abstract class BaseUserSelectComponent {
|
|
|
1605
2192
|
* />
|
|
1606
2193
|
* ```
|
|
1607
2194
|
*/
|
|
1608
|
-
declare class UserMultiSelectComponent extends BaseUserSelectComponent {
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
2195
|
+
export declare class UserMultiSelectComponent extends BaseUserSelectComponent {
|
|
2196
|
+
readonly showClear: import("@angular/core").InputSignal<boolean>;
|
|
2197
|
+
readonly value: import("@angular/core").ModelSignal<string[] | null>;
|
|
2198
|
+
readonly usersSelected: import("@angular/core").OutputEmitterRef<IUserBasicInfo[]>;
|
|
2199
|
+
readonly selectedObjects: import("@angular/core").Signal<import("@flusys/ng-shared").IDropDown[]>;
|
|
2200
|
+
protected setupValueEffect(): void;
|
|
2201
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UserMultiSelectComponent, never>;
|
|
2202
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UserMultiSelectComponent, "lib-user-multi-select", never, {
|
|
2203
|
+
"showClear": {
|
|
2204
|
+
"alias": "showClear";
|
|
2205
|
+
"required": false;
|
|
2206
|
+
"isSignal": true;
|
|
2207
|
+
};
|
|
2208
|
+
"value": {
|
|
2209
|
+
"alias": "value";
|
|
2210
|
+
"required": false;
|
|
2211
|
+
"isSignal": true;
|
|
2212
|
+
};
|
|
2213
|
+
}, {
|
|
2214
|
+
"value": "valueChange";
|
|
2215
|
+
"usersSelected": "usersSelected";
|
|
2216
|
+
}, never, never, true, never>;
|
|
1616
2217
|
}
|
|
1617
|
-
|
|
1618
2218
|
/**
|
|
1619
2219
|
* User Select Component - Single user selection with lazy loading.
|
|
1620
2220
|
*
|
|
@@ -1642,16 +2242,29 @@ declare class UserMultiSelectComponent extends BaseUserSelectComponent {
|
|
|
1642
2242
|
* />
|
|
1643
2243
|
* ```
|
|
1644
2244
|
*/
|
|
1645
|
-
declare class UserSelectComponent extends BaseUserSelectComponent {
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
2245
|
+
export declare class UserSelectComponent extends BaseUserSelectComponent {
|
|
2246
|
+
readonly showClear: import("@angular/core").InputSignal<boolean>;
|
|
2247
|
+
readonly value: import("@angular/core").ModelSignal<string | null>;
|
|
2248
|
+
readonly userSelected: import("@angular/core").OutputEmitterRef<IUserBasicInfo | null>;
|
|
2249
|
+
readonly selectedObject: import("@angular/core").Signal<import("@flusys/ng-shared").IDropDown | null>;
|
|
2250
|
+
protected setupValueEffect(): void;
|
|
2251
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UserSelectComponent, never>;
|
|
2252
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UserSelectComponent, "lib-user-select", never, {
|
|
2253
|
+
"showClear": {
|
|
2254
|
+
"alias": "showClear";
|
|
2255
|
+
"required": false;
|
|
2256
|
+
"isSignal": true;
|
|
2257
|
+
};
|
|
2258
|
+
"value": {
|
|
2259
|
+
"alias": "value";
|
|
2260
|
+
"required": false;
|
|
2261
|
+
"isSignal": true;
|
|
2262
|
+
};
|
|
2263
|
+
}, {
|
|
2264
|
+
"value": "valueChange";
|
|
2265
|
+
"userSelected": "userSelected";
|
|
2266
|
+
}, never, never, true, never>;
|
|
1653
2267
|
}
|
|
1654
|
-
|
|
1655
2268
|
/**
|
|
1656
2269
|
* Injection Tokens for Provider Interfaces
|
|
1657
2270
|
*
|
|
@@ -1678,25 +2291,25 @@ declare class UserSelectComponent extends BaseUserSelectComponent {
|
|
|
1678
2291
|
*
|
|
1679
2292
|
* Provides user data access for IAM user selection.
|
|
1680
2293
|
*/
|
|
1681
|
-
declare const USER_PROVIDER: InjectionToken<IUserProvider>;
|
|
2294
|
+
export declare const USER_PROVIDER: InjectionToken<IUserProvider>;
|
|
1682
2295
|
/**
|
|
1683
2296
|
* Company API Provider Token
|
|
1684
2297
|
*
|
|
1685
2298
|
* Provides company data access for IAM company selection.
|
|
1686
2299
|
*/
|
|
1687
|
-
declare const COMPANY_API_PROVIDER: InjectionToken<ICompanyApiProvider>;
|
|
2300
|
+
export declare const COMPANY_API_PROVIDER: InjectionToken<ICompanyApiProvider>;
|
|
1688
2301
|
/**
|
|
1689
2302
|
* User Permission Provider Token
|
|
1690
2303
|
*
|
|
1691
2304
|
* Provides user permission assignment operations for IAM.
|
|
1692
2305
|
*/
|
|
1693
|
-
declare const USER_PERMISSION_PROVIDER: InjectionToken<IUserPermissionProvider>;
|
|
2306
|
+
export declare const USER_PERMISSION_PROVIDER: InjectionToken<IUserPermissionProvider>;
|
|
1694
2307
|
/**
|
|
1695
2308
|
* Auth State Provider Token
|
|
1696
2309
|
*
|
|
1697
2310
|
* Provides auth state access for feature packages (form-builder, etc.)
|
|
1698
2311
|
*/
|
|
1699
|
-
declare const AUTH_STATE_PROVIDER: InjectionToken<IAuthStateProvider>;
|
|
2312
|
+
export declare const AUTH_STATE_PROVIDER: InjectionToken<IAuthStateProvider>;
|
|
1700
2313
|
/**
|
|
1701
2314
|
* Profile Permission Provider Token
|
|
1702
2315
|
*
|
|
@@ -1704,7 +2317,7 @@ declare const AUTH_STATE_PROVIDER: InjectionToken<IAuthStateProvider>;
|
|
|
1704
2317
|
* Optional - if not configured, profile permissions section is hidden.
|
|
1705
2318
|
* Use with `inject(PROFILE_PERMISSION_PROVIDER, { optional: true })`.
|
|
1706
2319
|
*/
|
|
1707
|
-
declare const PROFILE_PERMISSION_PROVIDER: InjectionToken<IProfilePermissionProvider>;
|
|
2320
|
+
export declare const PROFILE_PERMISSION_PROVIDER: InjectionToken<IProfilePermissionProvider>;
|
|
1708
2321
|
/**
|
|
1709
2322
|
* File Provider Token
|
|
1710
2323
|
*
|
|
@@ -1718,7 +2331,7 @@ declare const PROFILE_PERMISSION_PROVIDER: InjectionToken<IProfilePermissionProv
|
|
|
1718
2331
|
* { provide: FILE_PROVIDER, useClass: StorageFileProvider },
|
|
1719
2332
|
* ]
|
|
1720
2333
|
*/
|
|
1721
|
-
declare const FILE_PROVIDER: InjectionToken<IFileProvider>;
|
|
2334
|
+
export declare const FILE_PROVIDER: InjectionToken<IFileProvider>;
|
|
1722
2335
|
/**
|
|
1723
2336
|
* Action Provider Token
|
|
1724
2337
|
*
|
|
@@ -1726,8 +2339,7 @@ declare const FILE_PROVIDER: InjectionToken<IFileProvider>;
|
|
|
1726
2339
|
* Optional - if not configured, permission pickers fall back to a free-text code input.
|
|
1727
2340
|
* Use with `inject(ACTION_PROVIDER, { optional: true })`.
|
|
1728
2341
|
*/
|
|
1729
|
-
declare const ACTION_PROVIDER: InjectionToken<IActionProvider>;
|
|
1730
|
-
|
|
2342
|
+
export declare const ACTION_PROVIDER: InjectionToken<IActionProvider>;
|
|
1731
2343
|
/**
|
|
1732
2344
|
* Permission Guard - Single permission or ILogicNode check.
|
|
1733
2345
|
*
|
|
@@ -1737,7 +2349,7 @@ declare const ACTION_PROVIDER: InjectionToken<IActionProvider>;
|
|
|
1737
2349
|
* { path: 'admin', canActivate: [permissionGuard(logicNode, '/access-denied')] }
|
|
1738
2350
|
* ```
|
|
1739
2351
|
*/
|
|
1740
|
-
declare function permissionGuard(permission: string | ILogicNode, redirectTo?: string): CanActivateFn;
|
|
2352
|
+
export declare function permissionGuard(permission: string | ILogicNode, redirectTo?: string): CanActivateFn;
|
|
1741
2353
|
/**
|
|
1742
2354
|
* Any Permission Guard (OR logic) - Access if user has ANY permission.
|
|
1743
2355
|
*
|
|
@@ -1746,7 +2358,7 @@ declare function permissionGuard(permission: string | ILogicNode, redirectTo?: s
|
|
|
1746
2358
|
* { path: 'users', canActivate: [anyPermissionGuard(['user.view', 'user.create'])] }
|
|
1747
2359
|
* ```
|
|
1748
2360
|
*/
|
|
1749
|
-
declare function anyPermissionGuard(permissions: string[], redirectTo?: string): CanActivateFn;
|
|
2361
|
+
export declare function anyPermissionGuard(permissions: string[], redirectTo?: string): CanActivateFn;
|
|
1750
2362
|
/**
|
|
1751
2363
|
* All Permissions Guard (AND logic) - Access only if user has ALL permissions.
|
|
1752
2364
|
*
|
|
@@ -1755,8 +2367,7 @@ declare function anyPermissionGuard(permissions: string[], redirectTo?: string):
|
|
|
1755
2367
|
* { path: 'admin', canActivate: [allPermissionsGuard(['admin.view', 'admin.manage'])] }
|
|
1756
2368
|
* ```
|
|
1757
2369
|
*/
|
|
1758
|
-
declare function allPermissionsGuard(permissions: string[], redirectTo?: string): CanActivateFn;
|
|
1759
|
-
|
|
2370
|
+
export declare function allPermissionsGuard(permissions: string[], redirectTo?: string): CanActivateFn;
|
|
1760
2371
|
/**
|
|
1761
2372
|
* Authenticated Guard - Redirects to login when the user isn't authenticated.
|
|
1762
2373
|
*
|
|
@@ -1768,17 +2379,15 @@ declare function allPermissionsGuard(permissions: string[], redirectTo?: string)
|
|
|
1768
2379
|
* { path: 'notifications', canActivate: [authenticatedGuard()] }
|
|
1769
2380
|
* ```
|
|
1770
2381
|
*/
|
|
1771
|
-
declare function authenticatedGuard(redirectTo?: string): CanActivateFn;
|
|
1772
|
-
|
|
1773
|
-
declare function
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
display: string;
|
|
2382
|
+
export declare function authenticatedGuard(redirectTo?: string): CanActivateFn;
|
|
2383
|
+
export declare function localToUtc(dateStr: string, timeStr: string, timezone: string): Date;
|
|
2384
|
+
export declare function utcToLocal(utcDate: Date | string, timezone: string): {
|
|
2385
|
+
date: string;
|
|
2386
|
+
time: string;
|
|
2387
|
+
display: string;
|
|
1778
2388
|
};
|
|
1779
|
-
declare function formatInTimezone(utcDate: Date | string, timezone: string, options?: Intl.DateTimeFormatOptions): string;
|
|
1780
|
-
declare function getUserTimezone(): string;
|
|
1781
|
-
|
|
2389
|
+
export declare function formatInTimezone(utcDate: Date | string, timezone: string, options?: Intl.DateTimeFormatOptions): string;
|
|
2390
|
+
export declare function getUserTimezone(): string;
|
|
1782
2391
|
/**
|
|
1783
2392
|
* Check if user has a specific permission using wildcard matching.
|
|
1784
2393
|
* Supports:
|
|
@@ -1786,28 +2395,27 @@ declare function getUserTimezone(): string;
|
|
|
1786
2395
|
* - Full wildcard: '*' matches everything
|
|
1787
2396
|
* - Module wildcard: 'user.*' matches 'user.create', 'user.read', etc.
|
|
1788
2397
|
*/
|
|
1789
|
-
declare function hasPermission(requiredPermission: string, userPermissions: string[]): boolean;
|
|
2398
|
+
export declare function hasPermission(requiredPermission: string, userPermissions: string[]): boolean;
|
|
1790
2399
|
/** Evaluate permission logic (string or ILogicNode) against user permissions */
|
|
1791
|
-
declare function evaluatePermission(logic: string | ILogicNode | null | undefined, permissions: string[]): boolean;
|
|
2400
|
+
export declare function evaluatePermission(logic: string | ILogicNode | null | undefined, permissions: string[]): boolean;
|
|
1792
2401
|
/** Recursively evaluate an ILogicNode tree */
|
|
1793
|
-
declare function evaluateLogicNode(node: ILogicNode, permissions: string[]): boolean;
|
|
2402
|
+
export declare function evaluateLogicNode(node: ILogicNode, permissions: string[]): boolean;
|
|
1794
2403
|
/** Check if user has ANY of the specified permissions (OR logic) */
|
|
1795
|
-
declare function hasAnyPermission(permissionCodes: string[], permissions: string[]): boolean;
|
|
2404
|
+
export declare function hasAnyPermission(permissionCodes: string[], permissions: string[]): boolean;
|
|
1796
2405
|
/** Check if user has ALL of the specified permissions (AND logic) */
|
|
1797
|
-
declare function hasAllPermissions(permissionCodes: string[], permissions: string[]): boolean;
|
|
1798
|
-
|
|
2406
|
+
export declare function hasAllPermissions(permissionCodes: string[], permissions: string[]): boolean;
|
|
1799
2407
|
/**
|
|
1800
2408
|
* Configuration for scroll pagination behavior
|
|
1801
2409
|
*/
|
|
1802
|
-
interface ScrollPaginationConfig {
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
2410
|
+
export interface ScrollPaginationConfig {
|
|
2411
|
+
/** Distance from bottom to trigger pagination (default: 50px) */
|
|
2412
|
+
threshold?: number;
|
|
2413
|
+
/** Current pagination state */
|
|
2414
|
+
pagination: IPagination;
|
|
2415
|
+
/** Total items available */
|
|
2416
|
+
total: number | undefined;
|
|
2417
|
+
/** Whether currently loading */
|
|
2418
|
+
isLoading: boolean;
|
|
1811
2419
|
}
|
|
1812
2420
|
/**
|
|
1813
2421
|
* Check if scroll has reached near bottom and calculate next page if available.
|
|
@@ -1827,13 +2435,73 @@ interface ScrollPaginationConfig {
|
|
|
1827
2435
|
* }
|
|
1828
2436
|
* ```
|
|
1829
2437
|
*/
|
|
1830
|
-
declare function checkScrollPagination(event: Event, config: ScrollPaginationConfig): IPagination | null;
|
|
1831
|
-
|
|
2438
|
+
export declare function checkScrollPagination(event: Event, config: ScrollPaginationConfig): IPagination | null;
|
|
1832
2439
|
/** The translatable reason in a failed HTTP call: the backend's `messageKey`/`messageVariables`, or `fallbackKey` when the response carries none. */
|
|
1833
|
-
declare function errorToMessageRef(error: unknown, fallbackKey?: string): IMessageRef;
|
|
1834
|
-
|
|
2440
|
+
export declare function errorToMessageRef(error: unknown, fallbackKey?: string): IMessageRef;
|
|
1835
2441
|
/** Escapes user-authored text interpolated into markup rendered via [innerHTML] (e.g. confirm dialog messages). */
|
|
1836
|
-
declare function escapeHtml(value: string): string;
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
2442
|
+
export declare function escapeHtml(value: string): string;
|
|
2443
|
+
export interface IBranchTreeSource {
|
|
2444
|
+
id: string;
|
|
2445
|
+
name: string;
|
|
2446
|
+
parentId?: string | null;
|
|
2447
|
+
serial?: number | null;
|
|
2448
|
+
/** Tree parent sent with a list of granted branches: the nearest ancestor also in the list, null for none */
|
|
2449
|
+
displayParentId?: string | null;
|
|
2450
|
+
}
|
|
2451
|
+
type IBranchLink = Pick<IBranchTreeSource, 'id' | 'parentId' | 'displayParentId'>;
|
|
2452
|
+
export interface IBranchHierarchyItem<T extends IBranchTreeSource> {
|
|
2453
|
+
data: T;
|
|
2454
|
+
depth: number;
|
|
2455
|
+
children: IBranchHierarchyItem<T>[];
|
|
2456
|
+
}
|
|
2457
|
+
export interface IBranchTreeRow<T extends IBranchTreeSource> {
|
|
2458
|
+
branch: T;
|
|
2459
|
+
depth: number;
|
|
2460
|
+
hasChildren: boolean;
|
|
2461
|
+
}
|
|
2462
|
+
export interface IBranchWalkOptions {
|
|
2463
|
+
/** Include the given branch id(s) themselves, first */
|
|
2464
|
+
includeSelf?: boolean;
|
|
2465
|
+
/** Levels to walk: 1 = direct children / direct parent. Unset, negative or not a number = no limit */
|
|
2466
|
+
maxDepth?: number;
|
|
2467
|
+
}
|
|
2468
|
+
type IdInput = string | null | undefined | ReadonlyArray<string | null | undefined>;
|
|
2469
|
+
export declare function compareBranches(a: IBranchTreeSource, b: IBranchTreeSource): number;
|
|
2470
|
+
/** Each id once, in input order, without empty values. */
|
|
2471
|
+
export declare function normalizeBranchIds(ids: IdInput): string[];
|
|
2472
|
+
/**
|
|
2473
|
+
* The branches as a sorted tree (siblings by `serial`, then name). Every branch appears exactly once:
|
|
2474
|
+
* a repeated id keeps its first entry, a branch whose parent is missing or is itself becomes a root,
|
|
2475
|
+
* and a parent cycle is cut at one of its branches, which then shows as a root.
|
|
2476
|
+
*/
|
|
2477
|
+
export declare function buildBranchHierarchy<T extends IBranchTreeSource>(branches: readonly T[]): IBranchHierarchyItem<T>[];
|
|
2478
|
+
/**
|
|
2479
|
+
* Keeps the branches that match and every branch above a match, so a search never shows a branch
|
|
2480
|
+
* without its path. With `includeDescendants`, everything under a match is kept as well.
|
|
2481
|
+
*/
|
|
2482
|
+
export declare function filterBranchHierarchy<T extends IBranchTreeSource>(items: readonly IBranchHierarchyItem<T>[], matches: (branch: T) => boolean, { includeDescendants }?: {
|
|
2483
|
+
includeDescendants?: boolean;
|
|
2484
|
+
}): IBranchHierarchyItem<T>[];
|
|
2485
|
+
/**
|
|
2486
|
+
* `TreeNode`s for `f-treeselect`. `excludeIds` drops those branches together with everything under
|
|
2487
|
+
* them (e.g. a branch and its descendants when picking its new parent).
|
|
2488
|
+
*/
|
|
2489
|
+
export declare function buildBranchTreeNodes<T extends IBranchTreeSource>(branches: readonly T[], excludeIds?: IdInput): TreeNode<T>[];
|
|
2490
|
+
/** The tree in display order (depth-first) as rows with their depth, for indented list layouts. */
|
|
2491
|
+
export declare function flattenBranchTree<T extends IBranchTreeSource>(branches: readonly T[]): IBranchTreeRow<T>[];
|
|
2492
|
+
/**
|
|
2493
|
+
* Every branch under `rootIds`, level by level. With `includeSelf` the given ids come first, even when
|
|
2494
|
+
* they are not in `branches`. Use it when a branch filter should also match the picked branch's
|
|
2495
|
+
* sub-branches. Safe against repeated ids and parent cycles.
|
|
2496
|
+
*/
|
|
2497
|
+
export declare function collectBranchDescendantIds(branches: readonly IBranchLink[], rootIds: IdInput, { includeSelf, maxDepth }?: IBranchWalkOptions): string[];
|
|
2498
|
+
/**
|
|
2499
|
+
* The parent chain of `branchId`, nearest parent first. Only branches in `branches` are returned - the
|
|
2500
|
+
* walk stops at a missing parent. With `includeSelf` the branch itself comes first. Safe against cycles.
|
|
2501
|
+
*/
|
|
2502
|
+
export declare function collectBranchAncestorIds(branches: readonly IBranchLink[], branchId: string | null | undefined, { includeSelf, maxDepth }?: IBranchWalkOptions): string[];
|
|
2503
|
+
/** True when `branchId` is `ancestorId` itself or sits anywhere under it. */
|
|
2504
|
+
export declare function isBranchWithin(branches: readonly IBranchLink[], branchId: string | null | undefined, ancestorId: string | null | undefined): boolean;
|
|
2505
|
+
/** The branches from the top-most known ancestor down to `branchId` (e.g. for "HQ / East / East 1"). */
|
|
2506
|
+
export declare function getBranchPath<T extends IBranchLink>(branches: readonly T[], branchId: string | null | undefined): T[];
|
|
2507
|
+
export { ApiResourceService as ApiService };
|