@masterteam/dashboard-builder 0.0.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 +41 -0
- package/assets/dashboard-builder.css +2 -0
- package/assets/i18n/ar.json +672 -0
- package/assets/i18n/en.json +683 -0
- package/fesm2022/masterteam-dashboard-builder-dashboard-dialog.component-D1JNWQMI.mjs +595 -0
- package/fesm2022/masterteam-dashboard-builder-dashboard-dialog.component-D1JNWQMI.mjs.map +1 -0
- package/fesm2022/masterteam-dashboard-builder.mjs +19409 -0
- package/fesm2022/masterteam-dashboard-builder.mjs.map +1 -0
- package/package.json +41 -0
- package/types/masterteam-dashboard-builder.d.ts +4616 -0
|
@@ -0,0 +1,4616 @@
|
|
|
1
|
+
import * as _masterteam_dashboard_builder from '@masterteam/dashboard-builder';
|
|
2
|
+
import * as _angular_core from '@angular/core';
|
|
3
|
+
import { OnInit, OnDestroy, AfterViewInit, OnChanges, SimpleChanges, TemplateRef, PipeTransform } from '@angular/core';
|
|
4
|
+
import { GridsterItem, GridsterConfig } from 'angular-gridster2';
|
|
5
|
+
import { ContextMenu } from 'primeng/contextmenu';
|
|
6
|
+
import { MenuItem } from 'primeng/api';
|
|
7
|
+
import * as _angular_forms from '@angular/forms';
|
|
8
|
+
import { ControlValueAccessor, FormGroup, FormArray, ValidationErrors } from '@angular/forms';
|
|
9
|
+
import * as rxjs from 'rxjs';
|
|
10
|
+
import { Observable } from 'rxjs';
|
|
11
|
+
import { ColumnDef, TableAction } from '@masterteam/components/table';
|
|
12
|
+
import { ModalService } from '@masterteam/components/modal';
|
|
13
|
+
import { ModalRef } from '@masterteam/components/dialog';
|
|
14
|
+
import { MTMenuItem } from '@masterteam/components/menu';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Localized name with English and Arabic
|
|
18
|
+
*/
|
|
19
|
+
interface LocalizedName {
|
|
20
|
+
en: string;
|
|
21
|
+
ar: string;
|
|
22
|
+
[key: string]: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Report type enum
|
|
26
|
+
*/
|
|
27
|
+
type ReportType = 'Dashboard' | 'Excel';
|
|
28
|
+
/**
|
|
29
|
+
* Request for modules tree from gateway
|
|
30
|
+
*/
|
|
31
|
+
interface ModulesTreeRequest {
|
|
32
|
+
services: string[];
|
|
33
|
+
includeValues?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Module value item from tree response
|
|
37
|
+
*/
|
|
38
|
+
interface ModuleValue {
|
|
39
|
+
id: number;
|
|
40
|
+
name: string;
|
|
41
|
+
value: string;
|
|
42
|
+
selector: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Module item from tree response
|
|
46
|
+
*/
|
|
47
|
+
interface ModuleItem {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
version?: string;
|
|
52
|
+
values: ModuleValue[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Service item from tree response
|
|
56
|
+
*/
|
|
57
|
+
interface ServiceItem {
|
|
58
|
+
serviceName: string;
|
|
59
|
+
modules: ModuleItem[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Modules tree response
|
|
63
|
+
*/
|
|
64
|
+
interface ModulesTreeResponse {
|
|
65
|
+
services: ServiceItem[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Grouped module option for select dropdown
|
|
69
|
+
*/
|
|
70
|
+
interface GroupedModuleOption {
|
|
71
|
+
/** Group label (module type name like "Levels", "Log") */
|
|
72
|
+
label: string;
|
|
73
|
+
/** Module type id */
|
|
74
|
+
moduleTypeId: string;
|
|
75
|
+
/** Items in this group */
|
|
76
|
+
items: ModuleSelectOption[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Module option for select dropdown
|
|
80
|
+
*/
|
|
81
|
+
interface ModuleSelectOption {
|
|
82
|
+
/** Module id (number) */
|
|
83
|
+
id: number;
|
|
84
|
+
/** Display name */
|
|
85
|
+
name: string;
|
|
86
|
+
/** Selector format "ModuleType:Id" */
|
|
87
|
+
selector: string;
|
|
88
|
+
/** Parent module type id */
|
|
89
|
+
moduleTypeId: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Request item for bulk properties lookup
|
|
93
|
+
*/
|
|
94
|
+
interface BulkPropertyRequestItem {
|
|
95
|
+
serviceName: string;
|
|
96
|
+
selector: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Request for bulk properties lookup from gateway
|
|
100
|
+
*/
|
|
101
|
+
interface BulkPropertiesRequest {
|
|
102
|
+
items: BulkPropertyRequestItem[];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Response item from bulk properties lookup
|
|
106
|
+
*/
|
|
107
|
+
interface BulkPropertiesResponseItem {
|
|
108
|
+
serviceName: string;
|
|
109
|
+
selector: string;
|
|
110
|
+
/** Display name for the specific selector (e.g., "Projects" for "Level:7") */
|
|
111
|
+
selectorName?: string;
|
|
112
|
+
properties: PropertyItem$1[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Response wrapper from bulk properties lookup
|
|
116
|
+
* API returns { data: { items: [...] } }
|
|
117
|
+
*/
|
|
118
|
+
interface BulkPropertiesResponse {
|
|
119
|
+
items: BulkPropertiesResponseItem[];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Property item from module properties response
|
|
123
|
+
*/
|
|
124
|
+
interface PropertyItem$1 {
|
|
125
|
+
id: number;
|
|
126
|
+
name: string;
|
|
127
|
+
hasName: boolean;
|
|
128
|
+
key: string;
|
|
129
|
+
hasKey: boolean;
|
|
130
|
+
normalizedKey: string;
|
|
131
|
+
hasNormalizedKey: boolean;
|
|
132
|
+
configuration: string;
|
|
133
|
+
hasConfiguration: boolean;
|
|
134
|
+
viewType: string;
|
|
135
|
+
hasViewType: boolean;
|
|
136
|
+
isTranslatable: boolean;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Property items response (lookup/status values)
|
|
140
|
+
*/
|
|
141
|
+
interface PropertyItemsResponse {
|
|
142
|
+
propertyKey: string;
|
|
143
|
+
viewType: string;
|
|
144
|
+
language: string;
|
|
145
|
+
items: PropertyItemOption[];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Property item option for filters
|
|
149
|
+
*/
|
|
150
|
+
interface PropertyItemOption {
|
|
151
|
+
key: string;
|
|
152
|
+
name: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Response from /metadata/{service}/modules/{moduleId}/properties
|
|
156
|
+
*/
|
|
157
|
+
interface PropertiesResponse {
|
|
158
|
+
properties: PropertyItem$1[];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Report URL configuration for dashboard exports
|
|
162
|
+
*/
|
|
163
|
+
interface ReportUrl {
|
|
164
|
+
url: string;
|
|
165
|
+
name: LocalizedName;
|
|
166
|
+
responseType?: string;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Dashboard-specific configuration
|
|
170
|
+
*/
|
|
171
|
+
interface ReportDashboardConfig {
|
|
172
|
+
ignoreQueryFilter?: boolean;
|
|
173
|
+
filters?: Record<string, any>;
|
|
174
|
+
versionNumber?: number;
|
|
175
|
+
extraInfo?: Record<string, any>;
|
|
176
|
+
reportUrls?: ReportUrl[];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Excel sheet configuration
|
|
180
|
+
*/
|
|
181
|
+
interface ExcelSheet {
|
|
182
|
+
name: string;
|
|
183
|
+
chartDataQuery?: {
|
|
184
|
+
dashboardId?: number;
|
|
185
|
+
[key: string]: any;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Excel-specific configuration
|
|
190
|
+
*/
|
|
191
|
+
interface ReportExcelConfig {
|
|
192
|
+
excel: ExcelSheet[];
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Chart link configuration (per-chart config in link)
|
|
196
|
+
*/
|
|
197
|
+
interface ChartLinkConfiguration {
|
|
198
|
+
series?: string[];
|
|
199
|
+
[key: string]: any;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Report chart link - links a chart component to a report
|
|
203
|
+
*/
|
|
204
|
+
interface ReportChartLink {
|
|
205
|
+
id?: number;
|
|
206
|
+
reportId: number;
|
|
207
|
+
chartComponentId?: string;
|
|
208
|
+
configration: ChartLinkConfiguration;
|
|
209
|
+
order?: number;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Report model - base record for dashboard and excel
|
|
213
|
+
*/
|
|
214
|
+
interface Report {
|
|
215
|
+
id?: number;
|
|
216
|
+
name: LocalizedName;
|
|
217
|
+
type: ReportType;
|
|
218
|
+
icon?: string;
|
|
219
|
+
url?: string;
|
|
220
|
+
showInMenu?: boolean;
|
|
221
|
+
isActive?: boolean;
|
|
222
|
+
createdAt?: string;
|
|
223
|
+
dashboardConfig?: ReportDashboardConfig;
|
|
224
|
+
excelConfig?: ReportExcelConfig;
|
|
225
|
+
chartLinks?: ReportChartLink[];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Style configuration for dashboard items
|
|
229
|
+
*/
|
|
230
|
+
interface StyleConfig {
|
|
231
|
+
'background-color'?: string;
|
|
232
|
+
color?: string;
|
|
233
|
+
'justify-content'?: 'start' | 'center' | 'end';
|
|
234
|
+
'font-size-title'?: number;
|
|
235
|
+
'font-size-value'?: number;
|
|
236
|
+
[key: string]: any;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Display configuration
|
|
240
|
+
*/
|
|
241
|
+
interface DisplayConfig {
|
|
242
|
+
StyleConfig: StyleConfig;
|
|
243
|
+
dimensions?: {
|
|
244
|
+
cols?: number;
|
|
245
|
+
rows?: number;
|
|
246
|
+
[key: string]: any;
|
|
247
|
+
};
|
|
248
|
+
[key: string]: any;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Service configuration for chart data
|
|
252
|
+
*/
|
|
253
|
+
interface ServiceConfig {
|
|
254
|
+
dashboardId: string;
|
|
255
|
+
chartType?: string;
|
|
256
|
+
query?: {
|
|
257
|
+
extraProperties?: any[];
|
|
258
|
+
properties?: any[];
|
|
259
|
+
[key: string]: any;
|
|
260
|
+
};
|
|
261
|
+
[key: string]: any;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Action configuration
|
|
265
|
+
*/
|
|
266
|
+
interface ActionConfig {
|
|
267
|
+
type: string;
|
|
268
|
+
actionType: string;
|
|
269
|
+
id?: string;
|
|
270
|
+
config?: Record<string, any>;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Client configuration for UI
|
|
274
|
+
*/
|
|
275
|
+
interface ClientConfig {
|
|
276
|
+
title?: LocalizedName;
|
|
277
|
+
componentName?: string;
|
|
278
|
+
functionName?: string;
|
|
279
|
+
subType?: string;
|
|
280
|
+
requestType?: string;
|
|
281
|
+
displayConfig?: DisplayConfig;
|
|
282
|
+
configAsType?: {
|
|
283
|
+
icon?: string;
|
|
284
|
+
breadcrumb?: any[];
|
|
285
|
+
[key: string]: any;
|
|
286
|
+
};
|
|
287
|
+
actions?: ActionConfig[];
|
|
288
|
+
filter?: {
|
|
289
|
+
configs?: any[];
|
|
290
|
+
[key: string]: any;
|
|
291
|
+
};
|
|
292
|
+
pieConfigOverried?: any;
|
|
293
|
+
barConfigOverride?: any;
|
|
294
|
+
stackBarConfigOverride?: any;
|
|
295
|
+
[key: string]: any;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Chart/Item configuration
|
|
299
|
+
*/
|
|
300
|
+
interface ItemConfig {
|
|
301
|
+
serviceConfig: ServiceConfig;
|
|
302
|
+
clientConfig: ClientConfig;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Dashboard chart item extending GridsterItem
|
|
306
|
+
*/
|
|
307
|
+
interface DashboardChartItem extends GridsterItem {
|
|
308
|
+
/** Link record ID from server */
|
|
309
|
+
id?: number;
|
|
310
|
+
/** Chart component GUID from server */
|
|
311
|
+
chartComponentId?: string;
|
|
312
|
+
config: ItemConfig;
|
|
313
|
+
chartTypeId?: string;
|
|
314
|
+
loading?: boolean;
|
|
315
|
+
quickManage?: boolean;
|
|
316
|
+
group?: string;
|
|
317
|
+
orderInGroup?: number;
|
|
318
|
+
selectedGroupIndex?: number;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Dashboard dialog item
|
|
322
|
+
*/
|
|
323
|
+
interface DashboardDialogItem {
|
|
324
|
+
id?: number;
|
|
325
|
+
name?: string;
|
|
326
|
+
config: ItemConfig;
|
|
327
|
+
chartTypeId?: string;
|
|
328
|
+
loading?: boolean;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Dashboard page configuration
|
|
332
|
+
* Alias for Report with Dashboard type - used for backwards compatibility
|
|
333
|
+
*/
|
|
334
|
+
type DashboardPage = Report;
|
|
335
|
+
/**
|
|
336
|
+
* Request payload for linking a chart to a report
|
|
337
|
+
*/
|
|
338
|
+
interface LinkChartRequest {
|
|
339
|
+
reportId: number;
|
|
340
|
+
chartComponentId?: string;
|
|
341
|
+
configration: ChartLinkConfiguration;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Request payload for bulk linking charts to a report
|
|
345
|
+
*/
|
|
346
|
+
interface BulkLinkChartRequest {
|
|
347
|
+
reportId: number;
|
|
348
|
+
chartComponentId?: string;
|
|
349
|
+
configration: ChartLinkConfiguration;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Response item from bulk link operation
|
|
353
|
+
*/
|
|
354
|
+
interface BulkLinkChartResponse {
|
|
355
|
+
id: number;
|
|
356
|
+
chartComponentId: string;
|
|
357
|
+
configration: string;
|
|
358
|
+
order: number;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Request payload for unlinking a chart from a report
|
|
362
|
+
*/
|
|
363
|
+
interface UnlinkChartRequest {
|
|
364
|
+
reportId: number;
|
|
365
|
+
chartComponentId: string;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Chart actions context for pipes
|
|
369
|
+
*/
|
|
370
|
+
interface ChartActionsContext {
|
|
371
|
+
deleteItem: (item: DashboardChartItem) => void;
|
|
372
|
+
removeGroup: (item: DashboardChartItem) => void;
|
|
373
|
+
editItem: (item: DashboardChartItem, parentItem?: DashboardChartItem) => void;
|
|
374
|
+
addDialogForChart: (item: DashboardChartItem) => void;
|
|
375
|
+
editOnDialogForChart: (item: DashboardChartItem) => void;
|
|
376
|
+
deleteDialogFromChart: (item: DashboardChartItem) => void;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Quick manage item types
|
|
380
|
+
*/
|
|
381
|
+
type QuickManageType = 'default' | 'pie' | 'bar' | 'stackBar' | 'snapshotBar' | null;
|
|
382
|
+
/**
|
|
383
|
+
* Module type for data sources
|
|
384
|
+
*/
|
|
385
|
+
interface ModuleType {
|
|
386
|
+
id: string;
|
|
387
|
+
name: string;
|
|
388
|
+
version?: string;
|
|
389
|
+
description?: string;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Chart data response structure
|
|
393
|
+
*/
|
|
394
|
+
interface ChartData {
|
|
395
|
+
labels?: string[];
|
|
396
|
+
values?: number[];
|
|
397
|
+
data?: any[];
|
|
398
|
+
rows?: any[];
|
|
399
|
+
columns?: any[];
|
|
400
|
+
total?: number;
|
|
401
|
+
[key: string]: any;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* HTTP methods for custom API
|
|
405
|
+
*/
|
|
406
|
+
declare enum HTTPMethod {
|
|
407
|
+
GET = "GET",
|
|
408
|
+
POST = "POST",
|
|
409
|
+
PUT = "PUT",
|
|
410
|
+
DELETE = "DELETE",
|
|
411
|
+
PATCH = "PATCH"
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Custom API configuration
|
|
415
|
+
*/
|
|
416
|
+
interface CustomApi {
|
|
417
|
+
customApiUrl: string;
|
|
418
|
+
method: HTTPMethod;
|
|
419
|
+
headers?: Record<string, string>;
|
|
420
|
+
params?: Record<string, any>;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Chart Type Configuration
|
|
425
|
+
*/
|
|
426
|
+
interface ChartTypeConfig {
|
|
427
|
+
id: string;
|
|
428
|
+
name: string;
|
|
429
|
+
icon: string;
|
|
430
|
+
serviceType: string;
|
|
431
|
+
componentName: string;
|
|
432
|
+
functionName: string;
|
|
433
|
+
requestType?: string;
|
|
434
|
+
category: 'chart' | 'card' | 'table' | 'special' | 'layout';
|
|
435
|
+
/** Products this chart type is available for (pplus, splus, report) */
|
|
436
|
+
products?: ('pplus' | 'splus' | 'report')[];
|
|
437
|
+
hideInList?: boolean;
|
|
438
|
+
/** Whether this type requires manage-item configuration (false = add directly) */
|
|
439
|
+
hasManageItem: boolean;
|
|
440
|
+
/** Default size when added to grid */
|
|
441
|
+
defaultSize?: {
|
|
442
|
+
cols: number;
|
|
443
|
+
rows: number;
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Module Type from API
|
|
448
|
+
*/
|
|
449
|
+
interface IModuleType {
|
|
450
|
+
id: string;
|
|
451
|
+
name: string;
|
|
452
|
+
version?: string;
|
|
453
|
+
description?: string;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Module with properties
|
|
457
|
+
*/
|
|
458
|
+
interface IModule {
|
|
459
|
+
moduleDisplay: string;
|
|
460
|
+
moduleId: number | string;
|
|
461
|
+
moduleName: string;
|
|
462
|
+
selectionId?: number;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Property definition from API
|
|
466
|
+
* Maps to PropertyItem from dashboard.model.ts
|
|
467
|
+
*/
|
|
468
|
+
interface IProperty {
|
|
469
|
+
id: number;
|
|
470
|
+
name: string;
|
|
471
|
+
hasName?: boolean;
|
|
472
|
+
key: string;
|
|
473
|
+
hasKey?: boolean;
|
|
474
|
+
normalizedKey: string;
|
|
475
|
+
hasNormalizedKey?: boolean;
|
|
476
|
+
configuration?: string;
|
|
477
|
+
hasConfiguration?: boolean;
|
|
478
|
+
viewType: string;
|
|
479
|
+
hasViewType?: boolean;
|
|
480
|
+
isTranslatable: boolean;
|
|
481
|
+
/** @deprecated Use PropertyItem.isCalculated when available */
|
|
482
|
+
isCalculated?: boolean;
|
|
483
|
+
/** @deprecated Use sorting on client side */
|
|
484
|
+
order?: number;
|
|
485
|
+
description?: string;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Property with grouping info
|
|
489
|
+
*/
|
|
490
|
+
interface IPropertyWithGroup extends IProperty {
|
|
491
|
+
groupingBy: string;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Selection filter
|
|
495
|
+
*/
|
|
496
|
+
interface SelectionFilter {
|
|
497
|
+
propertyKey: string | null;
|
|
498
|
+
propertyValue: any;
|
|
499
|
+
operation: 'Equals' | 'NotEquals' | 'OneOf' | 'Between' | 'Contains' | 'GreaterThan' | 'LessThan' | null;
|
|
500
|
+
logical: 'And' | 'Or' | null;
|
|
501
|
+
operationLevel?: number | null;
|
|
502
|
+
propertyData?: any;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Selection configuration
|
|
506
|
+
*/
|
|
507
|
+
interface ISelection {
|
|
508
|
+
id: number;
|
|
509
|
+
service?: string | null;
|
|
510
|
+
/** Module selector in format "ModuleType:Id" (e.g., "Level:7") */
|
|
511
|
+
selector: string | null;
|
|
512
|
+
/** Display name of the selected module (e.g., "Project" for "Level:7") */
|
|
513
|
+
selectorName?: string | null;
|
|
514
|
+
filters: SelectionFilter[];
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Source link configuration for joins
|
|
518
|
+
*/
|
|
519
|
+
interface SourceLink {
|
|
520
|
+
source1SelectionId: number | null;
|
|
521
|
+
source2SelectionId: number | null;
|
|
522
|
+
source1PropertyKey: string | null;
|
|
523
|
+
source2PropertyKey: string | null;
|
|
524
|
+
source1Properties?: IProperty[];
|
|
525
|
+
source2Properties?: IProperty[];
|
|
526
|
+
isLeftJoin?: boolean;
|
|
527
|
+
isFilterLinkage?: boolean;
|
|
528
|
+
sourceLinkId?: number | null;
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Available chart types - matching old groupedCharts implementation
|
|
532
|
+
*/
|
|
533
|
+
declare const CHART_TYPES: ChartTypeConfig[];
|
|
534
|
+
/**
|
|
535
|
+
* Manage Item Service
|
|
536
|
+
*
|
|
537
|
+
* Handles state and operations for the manage-item drawer
|
|
538
|
+
*/
|
|
539
|
+
declare class ManageItemService {
|
|
540
|
+
private dashboardService;
|
|
541
|
+
private fb;
|
|
542
|
+
readonly chart: _angular_core.WritableSignal<DashboardChartItem | null>;
|
|
543
|
+
readonly selectedType: _angular_core.WritableSignal<ChartTypeConfig | null>;
|
|
544
|
+
readonly chartTypes: _angular_core.WritableSignal<ChartTypeConfig[]>;
|
|
545
|
+
readonly moduleTypes: _angular_core.WritableSignal<IModuleType[]>;
|
|
546
|
+
readonly modulesProperties: _angular_core.WritableSignal<{
|
|
547
|
+
moduleName: string;
|
|
548
|
+
moduleDisplay: string;
|
|
549
|
+
properties: IProperty[];
|
|
550
|
+
}[]>;
|
|
551
|
+
readonly propertiesFlat: _angular_core.WritableSignal<IPropertyWithGroup[]>;
|
|
552
|
+
readonly isEdit: _angular_core.WritableSignal<boolean>;
|
|
553
|
+
readonly dirty: _angular_core.WritableSignal<boolean>;
|
|
554
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
555
|
+
readonly configSignal: _angular_core.WritableSignal<ItemConfig | null>;
|
|
556
|
+
readonly chartTypesFiltered: _angular_core.Signal<ChartTypeConfig[]>;
|
|
557
|
+
readonly chartTypesByCategory: _angular_core.Signal<{
|
|
558
|
+
card: ChartTypeConfig[];
|
|
559
|
+
chart: ChartTypeConfig[];
|
|
560
|
+
table: ChartTypeConfig[];
|
|
561
|
+
special: ChartTypeConfig[];
|
|
562
|
+
layout: ChartTypeConfig[];
|
|
563
|
+
}>;
|
|
564
|
+
readonly chartForm: _angular_forms.FormGroup<{
|
|
565
|
+
id: _angular_forms.FormControl<number | null>;
|
|
566
|
+
name: _angular_forms.FormControl<string | null>;
|
|
567
|
+
dashboardId: _angular_forms.FormControl<string | null>;
|
|
568
|
+
chartTypeId: _angular_forms.FormControl<string | null>;
|
|
569
|
+
configuration: _angular_forms.FormGroup<{
|
|
570
|
+
clientConfig: _angular_forms.FormControl<ClientConfig | null>;
|
|
571
|
+
serviceConfig: _angular_forms.FormControl<ServiceConfig | null>;
|
|
572
|
+
}>;
|
|
573
|
+
}>;
|
|
574
|
+
/**
|
|
575
|
+
* Reset all state
|
|
576
|
+
*/
|
|
577
|
+
resetState(): void;
|
|
578
|
+
/**
|
|
579
|
+
* Initialize with existing chart (edit mode) or empty (new mode)
|
|
580
|
+
*/
|
|
581
|
+
init(chartData?: DashboardChartItem): void;
|
|
582
|
+
/**
|
|
583
|
+
* Set chart data for editing
|
|
584
|
+
*/
|
|
585
|
+
setChart(chartData: DashboardChartItem): void;
|
|
586
|
+
/**
|
|
587
|
+
* Select a chart type
|
|
588
|
+
*/
|
|
589
|
+
selectType(type: ChartTypeConfig): void;
|
|
590
|
+
/**
|
|
591
|
+
* Mark form as dirty
|
|
592
|
+
*/
|
|
593
|
+
markDirty(): void;
|
|
594
|
+
/**
|
|
595
|
+
* Get configuration value (returns signal value for reactivity)
|
|
596
|
+
*/
|
|
597
|
+
getConfig(): ItemConfig | null;
|
|
598
|
+
/**
|
|
599
|
+
* Update service config
|
|
600
|
+
*/
|
|
601
|
+
updateServiceConfig(partial: Partial<ServiceConfig>): void;
|
|
602
|
+
/**
|
|
603
|
+
* Update client config
|
|
604
|
+
*/
|
|
605
|
+
updateClientConfig(partial: Partial<ClientConfig>): void;
|
|
606
|
+
/**
|
|
607
|
+
* Load module types from API
|
|
608
|
+
*/
|
|
609
|
+
loadModuleTypes(): void;
|
|
610
|
+
/**
|
|
611
|
+
* Load properties for selected modules
|
|
612
|
+
*/
|
|
613
|
+
loadPropertiesForModules(modules: {
|
|
614
|
+
moduleType: string;
|
|
615
|
+
moduleDisplay?: string;
|
|
616
|
+
}[]): void;
|
|
617
|
+
/**
|
|
618
|
+
* Get final chart data for saving
|
|
619
|
+
*/
|
|
620
|
+
getFinalChartData(): {
|
|
621
|
+
configuration: ItemConfig;
|
|
622
|
+
chartTypeId: string;
|
|
623
|
+
} | null;
|
|
624
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageItemService, never>;
|
|
625
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ManageItemService>;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* Dashboard Builder Component
|
|
630
|
+
*
|
|
631
|
+
* Main component for building and managing dashboard layouts.
|
|
632
|
+
* Features:
|
|
633
|
+
* - Gridster-based drag & drop layout
|
|
634
|
+
* - Chart management (add, edit, delete)
|
|
635
|
+
* - Group support
|
|
636
|
+
* - Multi-select and copy/paste
|
|
637
|
+
* - Chart settings drawer (pie, bar, stack bar controls)
|
|
638
|
+
*/
|
|
639
|
+
declare class DashboardBuilder implements OnInit, OnDestroy {
|
|
640
|
+
private cdr;
|
|
641
|
+
private dashboardService;
|
|
642
|
+
private storeService;
|
|
643
|
+
private transloco;
|
|
644
|
+
private modalService;
|
|
645
|
+
/** Whether to wrap content in mt-page component */
|
|
646
|
+
readonly isPage: _angular_core.InputSignal<boolean>;
|
|
647
|
+
/** Page title when isPage is true */
|
|
648
|
+
readonly pageTitle: _angular_core.InputSignal<string>;
|
|
649
|
+
/** Show back button in page header */
|
|
650
|
+
readonly backButton: _angular_core.InputSignal<boolean>;
|
|
651
|
+
/** Dashboard/Page ID to load */
|
|
652
|
+
readonly pageId: _angular_core.InputSignal<string | number | null>;
|
|
653
|
+
/** Read-only mode */
|
|
654
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
655
|
+
/** Emit when page config changes */
|
|
656
|
+
readonly pageChange: _angular_core.OutputEmitterRef<_masterteam_dashboard_builder.Report>;
|
|
657
|
+
/** Emit when charts change */
|
|
658
|
+
readonly chartsChange: _angular_core.OutputEmitterRef<DashboardChartItem[]>;
|
|
659
|
+
/** Emit when save is complete */
|
|
660
|
+
readonly onSave: _angular_core.OutputEmitterRef<void>;
|
|
661
|
+
/** Emit when back button is clicked */
|
|
662
|
+
readonly onBack: _angular_core.OutputEmitterRef<void>;
|
|
663
|
+
/** Emit when requesting to add new chart (opens external chart editor) */
|
|
664
|
+
readonly onAddChart: _angular_core.OutputEmitterRef<{
|
|
665
|
+
x: number;
|
|
666
|
+
y: number;
|
|
667
|
+
}>;
|
|
668
|
+
/** Emit when requesting to edit chart */
|
|
669
|
+
readonly onEditChart: _angular_core.OutputEmitterRef<{
|
|
670
|
+
chart: DashboardChartItem;
|
|
671
|
+
isDialog?: boolean;
|
|
672
|
+
}>;
|
|
673
|
+
readonly contextMenu: _angular_core.Signal<ContextMenu | undefined>;
|
|
674
|
+
readonly gridsterContainer: _angular_core.Signal<any>;
|
|
675
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
676
|
+
readonly saving: _angular_core.WritableSignal<boolean>;
|
|
677
|
+
readonly pageConfig: _angular_core.WritableSignal<_masterteam_dashboard_builder.Report | null>;
|
|
678
|
+
readonly charts: _angular_core.WritableSignal<DashboardChartItem[]>;
|
|
679
|
+
readonly dialogs: _angular_core.WritableSignal<DashboardDialogItem[]>;
|
|
680
|
+
readonly filtersConfig: _angular_core.WritableSignal<any[]>;
|
|
681
|
+
readonly selectedCharts: _angular_core.WritableSignal<string[]>;
|
|
682
|
+
readonly contextPos: _angular_core.WritableSignal<{
|
|
683
|
+
x: number;
|
|
684
|
+
y: number;
|
|
685
|
+
}>;
|
|
686
|
+
readonly stopActionsOnCards: _angular_core.WritableSignal<boolean>;
|
|
687
|
+
readonly pendingWidgetType: _angular_core.WritableSignal<ChartTypeConfig | null>;
|
|
688
|
+
/** Reference to widget palette drawer */
|
|
689
|
+
private widgetPaletteRef;
|
|
690
|
+
/** Reference to chart settings drawer */
|
|
691
|
+
private chartSettingsRef;
|
|
692
|
+
readonly languageCode: _angular_core.Signal<string>;
|
|
693
|
+
readonly direction: _angular_core.Signal<"rtl" | "ltr">;
|
|
694
|
+
readonly chartActionsContext: ChartActionsContext;
|
|
695
|
+
readonly options: GridsterConfig;
|
|
696
|
+
private subscription;
|
|
697
|
+
private isDragging;
|
|
698
|
+
private scrollInterval;
|
|
699
|
+
private dragStartY;
|
|
700
|
+
readonly menuItems: _angular_core.Signal<MenuItem[]>;
|
|
701
|
+
ngOnInit(): void;
|
|
702
|
+
ngOnDestroy(): void;
|
|
703
|
+
private setupEventListeners;
|
|
704
|
+
private removeEventListeners;
|
|
705
|
+
private loadPageIfNeeded;
|
|
706
|
+
loadPage(id: string | number): void;
|
|
707
|
+
saveDash(): void;
|
|
708
|
+
addOrEditPage(page?: DashboardPage): void;
|
|
709
|
+
deleteReport(): void;
|
|
710
|
+
onItemResize(item: GridsterItem, itemComponent: any): void;
|
|
711
|
+
onItemChange(item: GridsterItem, _itemComponent: any): void;
|
|
712
|
+
onContextMenu(event: MouseEvent, item: GridsterItem): void;
|
|
713
|
+
/** Handle dragover on gridster - must call preventDefault to allow drop */
|
|
714
|
+
onGridDragOver(event: DragEvent): void;
|
|
715
|
+
/** Handle drop on gridster - just prevent default, actual handling in onDrop */
|
|
716
|
+
onGridDrop(event: DragEvent): void;
|
|
717
|
+
/** Handle drop on empty cell from widget palette */
|
|
718
|
+
onDrop(event: DragEvent, item: GridsterItem): void;
|
|
719
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
720
|
+
onSelect(chart: DashboardChartItem, event: MouseEvent): void;
|
|
721
|
+
pasteSelectedCharts(): void;
|
|
722
|
+
private pasteItemInChart;
|
|
723
|
+
addItem(): void;
|
|
724
|
+
editItem(chart: DashboardChartItem, parentItem?: DashboardChartItem): void;
|
|
725
|
+
deleteItem(chart: DashboardChartItem): void;
|
|
726
|
+
private removeChartLocally;
|
|
727
|
+
newChart(value: any): void;
|
|
728
|
+
editChart(value: any): void;
|
|
729
|
+
createGroup(): void;
|
|
730
|
+
removeGroup(groupItem: DashboardChartItem): void;
|
|
731
|
+
addHeader(): void;
|
|
732
|
+
addTopbar(): void;
|
|
733
|
+
/** Open widget palette drawer */
|
|
734
|
+
toggleWidgetPalette(): void;
|
|
735
|
+
/** Close widget palette drawer */
|
|
736
|
+
closeWidgetPalette(): void;
|
|
737
|
+
/** Add widget based on type configuration */
|
|
738
|
+
addWidgetByType(widgetType: ChartTypeConfig): void;
|
|
739
|
+
/** Add layout widget directly (header, topbar, group) */
|
|
740
|
+
private addLayoutWidget;
|
|
741
|
+
/** Open manage-item drawer for a specific widget type */
|
|
742
|
+
private openManageItemForType;
|
|
743
|
+
/** Create new chart with specified size */
|
|
744
|
+
private newChartWithSize;
|
|
745
|
+
openBreadcrumb(item: DashboardChartItem): void;
|
|
746
|
+
openManageFilter(): void;
|
|
747
|
+
addDialogForChart(chart: DashboardChartItem): void;
|
|
748
|
+
editOnDialogForChart(chart: DashboardChartItem): void;
|
|
749
|
+
deleteDialogFromChart(chart: DashboardChartItem): void;
|
|
750
|
+
/** Open chart settings drawer for item configuration */
|
|
751
|
+
openQuickManage(event: Event, item: DashboardChartItem): void;
|
|
752
|
+
/** Handle apply from chart settings drawer */
|
|
753
|
+
onQuickManageApply(updatedItem: DashboardChartItem): void;
|
|
754
|
+
stopAndActiveActions(): void;
|
|
755
|
+
reRenderItem(item: DashboardChartItem): void;
|
|
756
|
+
isSelected(chart: DashboardChartItem): boolean;
|
|
757
|
+
showQuickManageButton(chart: DashboardChartItem): boolean;
|
|
758
|
+
private handleDragOver;
|
|
759
|
+
private handleDrop;
|
|
760
|
+
private handleDragEnd;
|
|
761
|
+
private startAutoScroll;
|
|
762
|
+
private stopAutoScroll;
|
|
763
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardBuilder, never>;
|
|
764
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardBuilder, "mt-dashboard-builder", never, { "isPage": { "alias": "isPage"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "backButton": { "alias": "backButton"; "required": false; "isSignal": true; }; "pageId": { "alias": "pageId"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "chartsChange": "chartsChange"; "onSave": "onSave"; "onBack": "onBack"; "onAddChart": "onAddChart"; "onEditChart": "onEditChart"; }, never, never, true, never>;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Dashboard Viewer Component
|
|
769
|
+
*
|
|
770
|
+
* A read-only component for viewing and displaying dashboard layouts.
|
|
771
|
+
* Similar to pageBuilder-gridster but without editing capabilities.
|
|
772
|
+
*
|
|
773
|
+
* Features:
|
|
774
|
+
* - Gridster-based layout display (read-only)
|
|
775
|
+
* - Chart/widget rendering
|
|
776
|
+
* - Group support with tab switching
|
|
777
|
+
* - Filter sidebar integration
|
|
778
|
+
* - Dialog rendering
|
|
779
|
+
*/
|
|
780
|
+
declare class DashboardViewer implements OnInit, OnDestroy {
|
|
781
|
+
private cdr;
|
|
782
|
+
private dashboardService;
|
|
783
|
+
private storeService;
|
|
784
|
+
/** Whether to wrap content in mt-page component */
|
|
785
|
+
readonly isPage: _angular_core.InputSignal<boolean>;
|
|
786
|
+
/** Page title when isPage is true */
|
|
787
|
+
readonly pageTitle: _angular_core.InputSignal<string>;
|
|
788
|
+
/** Show back button in page header */
|
|
789
|
+
readonly backButton: _angular_core.InputSignal<boolean>;
|
|
790
|
+
/** Dashboard/Page ID to load */
|
|
791
|
+
readonly pageId: _angular_core.InputSignal<string | number | null>;
|
|
792
|
+
/** Pre-loaded charts (optional - if provided, skips API call) */
|
|
793
|
+
readonly chartsData: _angular_core.InputSignal<DashboardChartItem[]>;
|
|
794
|
+
/** Pre-loaded dialogs (optional) */
|
|
795
|
+
readonly dialogsData: _angular_core.InputSignal<DashboardDialogItem[]>;
|
|
796
|
+
/** Pre-loaded filters (optional) */
|
|
797
|
+
readonly filtersData: _angular_core.InputSignal<any[]>;
|
|
798
|
+
/** Show filters sidebar */
|
|
799
|
+
readonly showFilters: _angular_core.InputSignal<boolean>;
|
|
800
|
+
/** Emit when page is loaded */
|
|
801
|
+
readonly pageLoaded: _angular_core.OutputEmitterRef<_masterteam_dashboard_builder.Report>;
|
|
802
|
+
/** Emit when back button is clicked */
|
|
803
|
+
readonly onBack: _angular_core.OutputEmitterRef<void>;
|
|
804
|
+
/** Emit when chart is clicked (for drill-down, etc.) */
|
|
805
|
+
readonly chartClick: _angular_core.OutputEmitterRef<{
|
|
806
|
+
chart: DashboardChartItem;
|
|
807
|
+
event: Event;
|
|
808
|
+
}>;
|
|
809
|
+
readonly gridsterContainer: _angular_core.Signal<any>;
|
|
810
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
811
|
+
readonly pageConfig: _angular_core.WritableSignal<_masterteam_dashboard_builder.Report | null>;
|
|
812
|
+
readonly charts: _angular_core.WritableSignal<DashboardChartItem[]>;
|
|
813
|
+
readonly dialogs: _angular_core.WritableSignal<DashboardDialogItem[]>;
|
|
814
|
+
readonly filters: _angular_core.WritableSignal<any[]>;
|
|
815
|
+
readonly languageCode: _angular_core.Signal<string>;
|
|
816
|
+
readonly direction: _angular_core.Signal<"rtl" | "ltr">;
|
|
817
|
+
readonly options: GridsterConfig;
|
|
818
|
+
private subscription;
|
|
819
|
+
private chartsDataEffect;
|
|
820
|
+
private dialogsDataEffect;
|
|
821
|
+
private filtersDataEffect;
|
|
822
|
+
ngOnInit(): void;
|
|
823
|
+
ngOnDestroy(): void;
|
|
824
|
+
private setupSubscriptions;
|
|
825
|
+
private loadPageIfNeeded;
|
|
826
|
+
loadPage(id: string | number): void;
|
|
827
|
+
reloadPage(): void;
|
|
828
|
+
/**
|
|
829
|
+
* Get the title for a group item
|
|
830
|
+
*/
|
|
831
|
+
getGroupTitle(item: DashboardChartItem): string;
|
|
832
|
+
/**
|
|
833
|
+
* Get children of a group
|
|
834
|
+
*/
|
|
835
|
+
getGroupChildren(item: DashboardChartItem): DashboardChartItem[];
|
|
836
|
+
/**
|
|
837
|
+
* Select a child in a group
|
|
838
|
+
*/
|
|
839
|
+
selectGroupChild(item: DashboardChartItem, index: number): void;
|
|
840
|
+
/**
|
|
841
|
+
* Check if item is a group
|
|
842
|
+
*/
|
|
843
|
+
isGroup(item: DashboardChartItem): boolean;
|
|
844
|
+
/**
|
|
845
|
+
* Check if item is a header
|
|
846
|
+
*/
|
|
847
|
+
isHeader(item: DashboardChartItem): boolean;
|
|
848
|
+
/**
|
|
849
|
+
* Check if item is a topbar
|
|
850
|
+
*/
|
|
851
|
+
isTopbar(item: DashboardChartItem): boolean;
|
|
852
|
+
/**
|
|
853
|
+
* Check if item should be shown (not grouped or is a group itself)
|
|
854
|
+
*/
|
|
855
|
+
shouldShowItem(item: DashboardChartItem): boolean;
|
|
856
|
+
/**
|
|
857
|
+
* Get item title
|
|
858
|
+
*/
|
|
859
|
+
getItemTitle(item: DashboardChartItem): string;
|
|
860
|
+
/**
|
|
861
|
+
* Get style config
|
|
862
|
+
*/
|
|
863
|
+
getStyleConfig(item: DashboardChartItem): Record<string, any>;
|
|
864
|
+
/**
|
|
865
|
+
* Get icon from configAsType
|
|
866
|
+
*/
|
|
867
|
+
getItemIcon(item: DashboardChartItem): string | null;
|
|
868
|
+
/**
|
|
869
|
+
* Get breadcrumb items for topbar
|
|
870
|
+
*/
|
|
871
|
+
getBreadcrumb(item: DashboardChartItem): any[];
|
|
872
|
+
/**
|
|
873
|
+
* Get chart type
|
|
874
|
+
*/
|
|
875
|
+
getChartType(item: DashboardChartItem): string;
|
|
876
|
+
/**
|
|
877
|
+
* Handle chart click
|
|
878
|
+
*/
|
|
879
|
+
onChartClick(chart: DashboardChartItem, event: Event): void;
|
|
880
|
+
/**
|
|
881
|
+
* Track function for ngFor
|
|
882
|
+
*/
|
|
883
|
+
trackByDashboardId(_index: number, item: DashboardChartItem): string;
|
|
884
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardViewer, never>;
|
|
885
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardViewer, "mt-dashboard-viewer", never, { "isPage": { "alias": "isPage"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "backButton": { "alias": "backButton"; "required": false; "isSignal": true; }; "pageId": { "alias": "pageId"; "required": false; "isSignal": true; }; "chartsData": { "alias": "chartsData"; "required": false; "isSignal": true; }; "dialogsData": { "alias": "dialogsData"; "required": false; "isSignal": true; }; "filtersData": { "alias": "filtersData"; "required": false; "isSignal": true; }; "showFilters": { "alias": "showFilters"; "required": false; "isSignal": true; }; }, { "pageLoaded": "pageLoaded"; "onBack": "onBack"; "chartClick": "chartClick"; }, never, never, true, never>;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
/**
|
|
889
|
+
* Chart Models
|
|
890
|
+
*
|
|
891
|
+
* Type definitions for chart data, configuration, and responses.
|
|
892
|
+
*/
|
|
893
|
+
|
|
894
|
+
/**
|
|
895
|
+
* Store interface for each dashboard item
|
|
896
|
+
*/
|
|
897
|
+
interface DashboardItemStore {
|
|
898
|
+
/** Initial configuration (immutable) */
|
|
899
|
+
initConfigurationItem?: ItemConfig;
|
|
900
|
+
/** Current configuration (may be modified) */
|
|
901
|
+
ConfigurationItem?: ItemConfig;
|
|
902
|
+
/** Raw data response from API */
|
|
903
|
+
DataResponse?: any;
|
|
904
|
+
/** Processed/transformed data for rendering */
|
|
905
|
+
DataHandled?: ChartDataHandled;
|
|
906
|
+
/** Flag to trigger data fetch */
|
|
907
|
+
GetData?: boolean;
|
|
908
|
+
/** Action being handled */
|
|
909
|
+
handleAction?: HandleAction;
|
|
910
|
+
/** Filter activation state */
|
|
911
|
+
filterActivated?: any;
|
|
912
|
+
/** Loading state for the item */
|
|
913
|
+
isLoading?: boolean;
|
|
914
|
+
/** Error state for the item */
|
|
915
|
+
error?: string | null;
|
|
916
|
+
/** Whether the item has an error */
|
|
917
|
+
hasError?: boolean;
|
|
918
|
+
/** Extra filter from parent context */
|
|
919
|
+
extraFilter?: Record<string, any>;
|
|
920
|
+
/** Stop actions flag */
|
|
921
|
+
stopActions?: boolean;
|
|
922
|
+
/** Query params for current context */
|
|
923
|
+
queryParams?: Record<string, any>;
|
|
924
|
+
/** Pre-query params to merge */
|
|
925
|
+
preQueryParams?: Record<string, any>;
|
|
926
|
+
/** Dialog visibility state */
|
|
927
|
+
showDialog?: boolean;
|
|
928
|
+
/** Dialog configuration */
|
|
929
|
+
dialogConfig?: any;
|
|
930
|
+
/** Dialog data */
|
|
931
|
+
dialogData?: any;
|
|
932
|
+
}
|
|
933
|
+
/**
|
|
934
|
+
* Action types for dashboard items
|
|
935
|
+
*/
|
|
936
|
+
interface HandleAction {
|
|
937
|
+
id: number | string;
|
|
938
|
+
type: 'openDialog' | 'closeDialog' | 'navigate' | 'filter' | 'refresh';
|
|
939
|
+
data: any;
|
|
940
|
+
}
|
|
941
|
+
/**
|
|
942
|
+
* Processed chart data structure
|
|
943
|
+
*/
|
|
944
|
+
interface ChartDataHandled {
|
|
945
|
+
/** ECharts options (for chart types) */
|
|
946
|
+
chartOptions?: any;
|
|
947
|
+
/** No data flag */
|
|
948
|
+
noData?: boolean;
|
|
949
|
+
/** Table columns */
|
|
950
|
+
columns?: TableColumn$1[];
|
|
951
|
+
/** Table data rows */
|
|
952
|
+
rows?: any[];
|
|
953
|
+
/** Statistic cards data */
|
|
954
|
+
cards?: StatisticCardData[];
|
|
955
|
+
/** Calendar/timeline options */
|
|
956
|
+
calendarOptions?: any;
|
|
957
|
+
/** Labels for display */
|
|
958
|
+
labels?: ChartLabel[];
|
|
959
|
+
/** Raw values */
|
|
960
|
+
values?: any[];
|
|
961
|
+
/** Any additional data */
|
|
962
|
+
[key: string]: any;
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Table column definition
|
|
966
|
+
*/
|
|
967
|
+
interface TableColumn$1 {
|
|
968
|
+
/** Column key (field name) */
|
|
969
|
+
key: string;
|
|
970
|
+
/** Display label */
|
|
971
|
+
label: string;
|
|
972
|
+
/** Alias for key */
|
|
973
|
+
field?: string;
|
|
974
|
+
/** Alias for label */
|
|
975
|
+
header?: string;
|
|
976
|
+
headerAr?: string;
|
|
977
|
+
sortable?: boolean;
|
|
978
|
+
filterable?: boolean;
|
|
979
|
+
width?: string;
|
|
980
|
+
align?: 'left' | 'center' | 'right';
|
|
981
|
+
type?: 'text' | 'number' | 'date' | 'status' | 'currency' | 'percentage';
|
|
982
|
+
format?: string;
|
|
983
|
+
hidden?: boolean;
|
|
984
|
+
}
|
|
985
|
+
/**
|
|
986
|
+
* Statistic card data
|
|
987
|
+
*/
|
|
988
|
+
interface StatisticCardData {
|
|
989
|
+
id?: string | number;
|
|
990
|
+
title: {
|
|
991
|
+
en?: string;
|
|
992
|
+
ar?: string;
|
|
993
|
+
} | string;
|
|
994
|
+
value: number | string;
|
|
995
|
+
icon?: string;
|
|
996
|
+
color?: string;
|
|
997
|
+
trend?: {
|
|
998
|
+
direction: 'up' | 'down' | 'neutral';
|
|
999
|
+
value: number;
|
|
1000
|
+
label?: string;
|
|
1001
|
+
};
|
|
1002
|
+
suffix?: string;
|
|
1003
|
+
prefix?: string;
|
|
1004
|
+
description?: string;
|
|
1005
|
+
actions?: any[];
|
|
1006
|
+
/** Subtitle text */
|
|
1007
|
+
subTitle?: {
|
|
1008
|
+
en?: string;
|
|
1009
|
+
ar?: string;
|
|
1010
|
+
} | string;
|
|
1011
|
+
/** Card width */
|
|
1012
|
+
width?: string;
|
|
1013
|
+
/** Whether the card is clickable */
|
|
1014
|
+
isClickable?: boolean;
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* Chart label for legends
|
|
1018
|
+
*/
|
|
1019
|
+
interface ChartLabel {
|
|
1020
|
+
key: string;
|
|
1021
|
+
label: string;
|
|
1022
|
+
color?: string;
|
|
1023
|
+
icon?: string;
|
|
1024
|
+
}
|
|
1025
|
+
/**
|
|
1026
|
+
* Request types for data fetching
|
|
1027
|
+
*/
|
|
1028
|
+
type RequestType = 'level' | 'levellog' | 'log' | 'custom' | 'snapShot' | 'levelCards' | 'timelineProjectDependencies' | 'customSplus' | 'phaseGate';
|
|
1029
|
+
/**
|
|
1030
|
+
* Chart type to component mapping
|
|
1031
|
+
*/
|
|
1032
|
+
type ComponentType = 'chart' | 'map' | 'BackgroundTextChart' | 'chartCustomWithCardInfo' | 'listOfcharts' | 'listOfCardsStatistic' | 'cardsStatistic' | 'header' | 'footer' | 'label' | 'listOfLevelCards' | 'dialog' | 'table' | 'phaseGateTable' | 'topbar' | 'timeline' | 'timelineProjectDependencies' | 'lastHistoryLevelCard' | 'entityPreview' | 'clusterStackedChart' | 'listComponentSplusCard' | 'splitterChart' | 'repeater' | 'levelCardsWithStatic' | 'phaseGateStepperCard' | 'Group';
|
|
1033
|
+
/**
|
|
1034
|
+
* EChart series data item
|
|
1035
|
+
*/
|
|
1036
|
+
interface EChartSeriesItem {
|
|
1037
|
+
value: number;
|
|
1038
|
+
name: string;
|
|
1039
|
+
key?: string;
|
|
1040
|
+
itemStyle?: {
|
|
1041
|
+
color?: string;
|
|
1042
|
+
borderColor?: string;
|
|
1043
|
+
borderWidth?: number;
|
|
1044
|
+
};
|
|
1045
|
+
extraValues?: Record<string, any>;
|
|
1046
|
+
groupValues?: Record<string, any>;
|
|
1047
|
+
}
|
|
1048
|
+
/**
|
|
1049
|
+
* Bar chart data structure
|
|
1050
|
+
*/
|
|
1051
|
+
interface BarChartData {
|
|
1052
|
+
noData: boolean;
|
|
1053
|
+
chartOptions: {
|
|
1054
|
+
xAxis: any;
|
|
1055
|
+
yAxis: any;
|
|
1056
|
+
series: any[];
|
|
1057
|
+
tooltip?: any;
|
|
1058
|
+
legend?: any;
|
|
1059
|
+
grid?: any;
|
|
1060
|
+
dataZoom?: any[];
|
|
1061
|
+
};
|
|
1062
|
+
}
|
|
1063
|
+
/**
|
|
1064
|
+
* Pie/Donut chart data structure
|
|
1065
|
+
*/
|
|
1066
|
+
interface PieChartData {
|
|
1067
|
+
noData: boolean;
|
|
1068
|
+
chartOptions: {
|
|
1069
|
+
series: any[];
|
|
1070
|
+
tooltip?: any;
|
|
1071
|
+
legend?: any;
|
|
1072
|
+
};
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Table view data structure
|
|
1076
|
+
*/
|
|
1077
|
+
interface TableViewData {
|
|
1078
|
+
columns: TableColumn$1[];
|
|
1079
|
+
rows: any[];
|
|
1080
|
+
data?: any[];
|
|
1081
|
+
total?: number;
|
|
1082
|
+
totalRecords?: number;
|
|
1083
|
+
groupBy?: string;
|
|
1084
|
+
isGrouped?: boolean;
|
|
1085
|
+
}
|
|
1086
|
+
/**
|
|
1087
|
+
* Timeline/Gantt data item
|
|
1088
|
+
*/
|
|
1089
|
+
interface TimelineItem {
|
|
1090
|
+
id?: string | number;
|
|
1091
|
+
title: string;
|
|
1092
|
+
startDate: string | Date;
|
|
1093
|
+
endDate: string | Date;
|
|
1094
|
+
color?: string;
|
|
1095
|
+
type?: string;
|
|
1096
|
+
progress?: number;
|
|
1097
|
+
dependencies?: string[];
|
|
1098
|
+
extraValues?: Record<string, any>;
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Timeline/Gantt data structure
|
|
1102
|
+
*/
|
|
1103
|
+
interface TimelineData {
|
|
1104
|
+
items: TimelineItem[];
|
|
1105
|
+
calendarOptions?: any;
|
|
1106
|
+
labels?: ChartLabel[];
|
|
1107
|
+
events?: any[];
|
|
1108
|
+
startDate?: string | Date;
|
|
1109
|
+
endDate?: string | Date;
|
|
1110
|
+
}
|
|
1111
|
+
/**
|
|
1112
|
+
* Breadcrumb item for topbar
|
|
1113
|
+
*/
|
|
1114
|
+
interface BreadcrumbItem {
|
|
1115
|
+
label: {
|
|
1116
|
+
en?: string;
|
|
1117
|
+
ar?: string;
|
|
1118
|
+
} | string;
|
|
1119
|
+
routerLink?: string;
|
|
1120
|
+
icon?: string;
|
|
1121
|
+
queryParams?: Record<string, any>;
|
|
1122
|
+
}
|
|
1123
|
+
/**
|
|
1124
|
+
* Filter configuration
|
|
1125
|
+
*/
|
|
1126
|
+
interface FilterConfig {
|
|
1127
|
+
show: boolean;
|
|
1128
|
+
propertyKey?: string;
|
|
1129
|
+
options?: FilterOption[];
|
|
1130
|
+
defaultValue?: any;
|
|
1131
|
+
type?: 'select' | 'multiselect' | 'multiSelect' | 'date' | 'daterange' | 'text';
|
|
1132
|
+
placeholder?: Record<string, string>;
|
|
1133
|
+
}
|
|
1134
|
+
/**
|
|
1135
|
+
* Filter option
|
|
1136
|
+
*/
|
|
1137
|
+
interface FilterOption {
|
|
1138
|
+
label: string;
|
|
1139
|
+
value: any;
|
|
1140
|
+
icon?: string;
|
|
1141
|
+
color?: string;
|
|
1142
|
+
}
|
|
1143
|
+
/**
|
|
1144
|
+
* Action click event
|
|
1145
|
+
*/
|
|
1146
|
+
interface ChartActionEvent {
|
|
1147
|
+
type: 'click' | 'dblclick' | 'hover' | 'clickOnHeader';
|
|
1148
|
+
data?: any;
|
|
1149
|
+
event?: Event;
|
|
1150
|
+
dataIndex?: number;
|
|
1151
|
+
seriesIndex?: number;
|
|
1152
|
+
name?: string;
|
|
1153
|
+
value?: any;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
declare class DashboardItem implements OnInit, OnDestroy {
|
|
1157
|
+
private readonly storeService;
|
|
1158
|
+
private readonly itemStoreService;
|
|
1159
|
+
private readonly chartDataService;
|
|
1160
|
+
private readonly actionService;
|
|
1161
|
+
private readonly transloco;
|
|
1162
|
+
private subscription;
|
|
1163
|
+
private readonly destroy$;
|
|
1164
|
+
/** Chart configuration */
|
|
1165
|
+
readonly config: _angular_core.InputSignal<ItemConfig | null>;
|
|
1166
|
+
/** Chart type identifier */
|
|
1167
|
+
readonly chartTypeId: _angular_core.InputSignal<string | number | undefined>;
|
|
1168
|
+
/** Read-only mode */
|
|
1169
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
1170
|
+
/** Whether this item is inside a group */
|
|
1171
|
+
readonly inGroup: _angular_core.InputSignal<boolean>;
|
|
1172
|
+
/** Whether this item is rendered inside a dialog */
|
|
1173
|
+
readonly isDialog: _angular_core.InputSignal<boolean>;
|
|
1174
|
+
/** Query params passed from parent (e.g., dialog) */
|
|
1175
|
+
readonly queryParams: _angular_core.InputSignal<Record<string, any>>;
|
|
1176
|
+
/** Emitted when an action is triggered (useful for dialog communication) */
|
|
1177
|
+
readonly actionTriggered: _angular_core.OutputEmitterRef<any>;
|
|
1178
|
+
/** Dashboard ID - derived from config or chartTypeId */
|
|
1179
|
+
readonly dashboardId: _angular_core.Signal<string | null>;
|
|
1180
|
+
/** Component name */
|
|
1181
|
+
readonly componentName: _angular_core.Signal<ComponentType>;
|
|
1182
|
+
/** Request type */
|
|
1183
|
+
readonly requestType: _angular_core.Signal<RequestType | undefined>;
|
|
1184
|
+
/** Function name for data handling */
|
|
1185
|
+
readonly functionName: _angular_core.Signal<string | undefined>;
|
|
1186
|
+
/** Custom API configuration */
|
|
1187
|
+
readonly customApi: _angular_core.Signal<CustomApi | undefined>;
|
|
1188
|
+
/** Language code for title display */
|
|
1189
|
+
readonly languageCode: _angular_core.Signal<string>;
|
|
1190
|
+
/** Chart type from service config */
|
|
1191
|
+
readonly chartType: _angular_core.Signal<string | undefined>;
|
|
1192
|
+
/** Loading state - SINGLE SOURCE OF TRUTH */
|
|
1193
|
+
readonly isLoading: _angular_core.WritableSignal<boolean>;
|
|
1194
|
+
/** Has error */
|
|
1195
|
+
readonly hasError: _angular_core.WritableSignal<boolean>;
|
|
1196
|
+
/** Error message */
|
|
1197
|
+
readonly errorMessage: _angular_core.WritableSignal<string | null>;
|
|
1198
|
+
/** Configuration from store */
|
|
1199
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1200
|
+
/** Statistic data for cardsStatistic type */
|
|
1201
|
+
readonly statisticData: _angular_core.WritableSignal<any>;
|
|
1202
|
+
/** Track if component has been initialized */
|
|
1203
|
+
private initialized;
|
|
1204
|
+
/** Track current dashboardId to detect changes */
|
|
1205
|
+
private currentDashboardId;
|
|
1206
|
+
constructor();
|
|
1207
|
+
ngOnInit(): void;
|
|
1208
|
+
/**
|
|
1209
|
+
* Setup subscriptions and fetch data for a specific dashboardId
|
|
1210
|
+
*/
|
|
1211
|
+
private setupForDashboardId;
|
|
1212
|
+
ngOnDestroy(): void;
|
|
1213
|
+
/**
|
|
1214
|
+
* Initialize store with configuration
|
|
1215
|
+
*/
|
|
1216
|
+
private initializeStore;
|
|
1217
|
+
/**
|
|
1218
|
+
* Main getData method - delegates to ChartDataService for all request types
|
|
1219
|
+
*/
|
|
1220
|
+
getData(): void;
|
|
1221
|
+
/**
|
|
1222
|
+
* Refresh data
|
|
1223
|
+
*/
|
|
1224
|
+
refresh(): void;
|
|
1225
|
+
/**
|
|
1226
|
+
* Trigger data fetch via store
|
|
1227
|
+
*/
|
|
1228
|
+
triggerDataFetch(): void;
|
|
1229
|
+
/**
|
|
1230
|
+
* Handle actions from child components (charts, tables, etc.)
|
|
1231
|
+
* This is the main entry point for action handling.
|
|
1232
|
+
*/
|
|
1233
|
+
doActions(eventData: any, eventType: string): void;
|
|
1234
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardItem, never>;
|
|
1235
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardItem, "mt-dashboard-item", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartTypeId": { "alias": "chartTypeId"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "isDialog": { "alias": "isDialog"; "required": false; "isSignal": true; }; "queryParams": { "alias": "queryParams"; "required": false; "isSignal": true; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
interface HeaderCardConfig$1 {
|
|
1239
|
+
showHeader?: boolean;
|
|
1240
|
+
isHeaderHidden?: boolean;
|
|
1241
|
+
headerClickable?: boolean;
|
|
1242
|
+
icon?: string;
|
|
1243
|
+
iconColor?: string;
|
|
1244
|
+
titleColor?: string;
|
|
1245
|
+
}
|
|
1246
|
+
interface CardBorderStyleConfig {
|
|
1247
|
+
'border-width'?: number;
|
|
1248
|
+
'border-top-show'?: boolean;
|
|
1249
|
+
'border-top-color'?: string;
|
|
1250
|
+
'border-right-show'?: boolean;
|
|
1251
|
+
'border-right-color'?: string;
|
|
1252
|
+
'border-bottom-show'?: boolean;
|
|
1253
|
+
'border-bottom-color'?: string;
|
|
1254
|
+
'border-left-show'?: boolean;
|
|
1255
|
+
'border-left-color'?: string;
|
|
1256
|
+
'background-color'?: string;
|
|
1257
|
+
'box-shadow'?: string;
|
|
1258
|
+
'border-radius'?: number;
|
|
1259
|
+
}
|
|
1260
|
+
interface CardStyleConfig$1 {
|
|
1261
|
+
backgroundColor?: string;
|
|
1262
|
+
borderRadius?: number;
|
|
1263
|
+
shadows?: Array<{
|
|
1264
|
+
x: number;
|
|
1265
|
+
y: number;
|
|
1266
|
+
blur: number;
|
|
1267
|
+
spread: number;
|
|
1268
|
+
color: string;
|
|
1269
|
+
}>;
|
|
1270
|
+
}
|
|
1271
|
+
declare class CardContentComponent {
|
|
1272
|
+
/** Card title */
|
|
1273
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
1274
|
+
/** Whether card is inside a group */
|
|
1275
|
+
readonly inGroup: _angular_core.InputSignal<boolean>;
|
|
1276
|
+
/** Header configuration */
|
|
1277
|
+
readonly headerConfig: _angular_core.InputSignal<HeaderCardConfig$1 | null>;
|
|
1278
|
+
/** Style configuration (border styling) */
|
|
1279
|
+
readonly styleConfig: _angular_core.InputSignal<CardBorderStyleConfig | null>;
|
|
1280
|
+
/** Card style configuration (background, shadows, border radius) */
|
|
1281
|
+
readonly cardStyleConfig: _angular_core.InputSignal<CardStyleConfig$1 | null>;
|
|
1282
|
+
/** Whether to show header */
|
|
1283
|
+
readonly showHeaderInput: _angular_core.InputSignal<boolean>;
|
|
1284
|
+
/** Whether header is clickable */
|
|
1285
|
+
readonly headerClickableInput: _angular_core.InputSignal<boolean>;
|
|
1286
|
+
/** No top end content flag */
|
|
1287
|
+
readonly isNoTopEnd: _angular_core.InputSignal<boolean>;
|
|
1288
|
+
/** Whether this card contains a chart (disables horizontal scroll) */
|
|
1289
|
+
readonly isChart: _angular_core.InputSignal<boolean>;
|
|
1290
|
+
/** Header click event */
|
|
1291
|
+
readonly headerClick: _angular_core.OutputEmitterRef<void>;
|
|
1292
|
+
/** Computed show header */
|
|
1293
|
+
readonly showHeader: _angular_core.Signal<boolean>;
|
|
1294
|
+
/** Computed header clickable */
|
|
1295
|
+
readonly headerClickable: _angular_core.Signal<boolean>;
|
|
1296
|
+
/** Computed card styles from StyleConfig and cardStyleConfig */
|
|
1297
|
+
readonly cardStyles: _angular_core.Signal<Record<string, string>>;
|
|
1298
|
+
/** Computed border radius style */
|
|
1299
|
+
readonly borderRadiusStyle: _angular_core.Signal<string>;
|
|
1300
|
+
onHeaderClick(): void;
|
|
1301
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardContentComponent, never>;
|
|
1302
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardContentComponent, "db-card-content", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "headerConfig": { "alias": "headerConfig"; "required": false; "isSignal": true; }; "styleConfig": { "alias": "styleConfig"; "required": false; "isSignal": true; }; "cardStyleConfig": { "alias": "cardStyleConfig"; "required": false; "isSignal": true; }; "showHeaderInput": { "alias": "showHeader"; "required": false; "isSignal": true; }; "headerClickableInput": { "alias": "headerClickable"; "required": false; "isSignal": true; }; "isNoTopEnd": { "alias": "isNoTopEnd"; "required": false; "isSignal": true; }; "isChart": { "alias": "isChart"; "required": false; "isSignal": true; }; }, { "headerClick": "headerClick"; }, never, ["[topEnd]", "[body]", "[footer]"], true, never>;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
declare class CardFilterComponent implements OnInit {
|
|
1306
|
+
private readonly storeService;
|
|
1307
|
+
private readonly transloco;
|
|
1308
|
+
/** Filter configuration */
|
|
1309
|
+
readonly config: _angular_core.InputSignal<FilterConfig | null>;
|
|
1310
|
+
/** Dashboard ID */
|
|
1311
|
+
readonly dashboardId: _angular_core.InputSignal<string | number | undefined>;
|
|
1312
|
+
/** Filter change event */
|
|
1313
|
+
readonly filterChange: _angular_core.OutputEmitterRef<any>;
|
|
1314
|
+
/** Selected value (single select) */
|
|
1315
|
+
selectedValue: any;
|
|
1316
|
+
/** Selected values (multi select) */
|
|
1317
|
+
selectedValues: any[];
|
|
1318
|
+
/** Date range */
|
|
1319
|
+
startDate: string;
|
|
1320
|
+
endDate: string;
|
|
1321
|
+
/** Language code */
|
|
1322
|
+
readonly langCode: _angular_core.Signal<string>;
|
|
1323
|
+
/** Filter type */
|
|
1324
|
+
readonly filterType: _angular_core.Signal<"date" | "text" | "select" | "multiselect" | "multiSelect" | "daterange">;
|
|
1325
|
+
/** Filter options */
|
|
1326
|
+
readonly options: _angular_core.Signal<FilterOption[]>;
|
|
1327
|
+
/** Placeholder text */
|
|
1328
|
+
readonly placeholder: _angular_core.Signal<string>;
|
|
1329
|
+
ngOnInit(): void;
|
|
1330
|
+
onFilterChange(value: any): void;
|
|
1331
|
+
onMultiFilterChange(values: any[]): void;
|
|
1332
|
+
onDateChange(): void;
|
|
1333
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardFilterComponent, never>;
|
|
1334
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardFilterComponent, "db-card-filter", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
declare class ChartCardComponent implements OnInit, OnDestroy {
|
|
1338
|
+
private readonly storeService;
|
|
1339
|
+
private readonly actionService;
|
|
1340
|
+
private readonly transloco;
|
|
1341
|
+
private readonly subscription;
|
|
1342
|
+
/** Dashboard ID for this card */
|
|
1343
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1344
|
+
/** Whether card is inside a group */
|
|
1345
|
+
readonly inGroup: _angular_core.InputSignal<boolean>;
|
|
1346
|
+
/** Config mode flag */
|
|
1347
|
+
readonly isConfigMode: _angular_core.InputSignal<boolean>;
|
|
1348
|
+
/** Action event output */
|
|
1349
|
+
readonly onAction: _angular_core.OutputEmitterRef<{
|
|
1350
|
+
type: string;
|
|
1351
|
+
data: any;
|
|
1352
|
+
}>;
|
|
1353
|
+
/** Configuration item */
|
|
1354
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1355
|
+
/** Handled chart data */
|
|
1356
|
+
readonly dataHandled: _angular_core.WritableSignal<ChartDataHandled | null>;
|
|
1357
|
+
/** Card title */
|
|
1358
|
+
readonly title: _angular_core.Signal<string>;
|
|
1359
|
+
/** Show filter flag */
|
|
1360
|
+
readonly showFilter: _angular_core.Signal<any>;
|
|
1361
|
+
/** Show top end section (filter or extra filters) */
|
|
1362
|
+
readonly showTopEnd: _angular_core.Signal<any>;
|
|
1363
|
+
/** Filter configuration */
|
|
1364
|
+
readonly filterConfig: _angular_core.Signal<{
|
|
1365
|
+
[key: string]: any;
|
|
1366
|
+
configs?: any[];
|
|
1367
|
+
} | undefined>;
|
|
1368
|
+
ngOnInit(): void;
|
|
1369
|
+
ngOnDestroy(): void;
|
|
1370
|
+
onChartClick(event: any): void;
|
|
1371
|
+
onHeaderClick(): void;
|
|
1372
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartCardComponent, never>;
|
|
1373
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartCardComponent, "db-chart-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "isConfigMode": { "alias": "isConfigMode"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
type EChartsType = any;
|
|
1377
|
+
declare class EChartComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {
|
|
1378
|
+
private readonly elementRef;
|
|
1379
|
+
private readonly ngZone;
|
|
1380
|
+
private readonly platformId;
|
|
1381
|
+
private chart;
|
|
1382
|
+
private resizeObserver;
|
|
1383
|
+
private echarts;
|
|
1384
|
+
/** Dashboard ID */
|
|
1385
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1386
|
+
/** Chart configuration/data - can be ECharts option directly or wrapped format */
|
|
1387
|
+
readonly chartConfig: _angular_core.InputSignal<any>;
|
|
1388
|
+
/** Item configuration */
|
|
1389
|
+
readonly configurationItem: _angular_core.InputSignal<ItemConfig | null>;
|
|
1390
|
+
/** Chart height */
|
|
1391
|
+
readonly height: _angular_core.InputSignal<string>;
|
|
1392
|
+
/** Whether this chart is in a group */
|
|
1393
|
+
readonly inGroup: _angular_core.InputSignal<boolean>;
|
|
1394
|
+
/** Whether header is hidden */
|
|
1395
|
+
readonly headerHidden: _angular_core.InputSignal<boolean>;
|
|
1396
|
+
/** Chart click event */
|
|
1397
|
+
readonly chartClick: _angular_core.OutputEmitterRef<{
|
|
1398
|
+
data: any;
|
|
1399
|
+
event: any;
|
|
1400
|
+
}>;
|
|
1401
|
+
/** Chart ready flag */
|
|
1402
|
+
readonly isReady: _angular_core.WritableSignal<boolean>;
|
|
1403
|
+
/** Legend items for custom legend */
|
|
1404
|
+
readonly legendItems: _angular_core.WritableSignal<{
|
|
1405
|
+
name: string;
|
|
1406
|
+
color: string;
|
|
1407
|
+
disabled: boolean;
|
|
1408
|
+
}[]>;
|
|
1409
|
+
/** Language code */
|
|
1410
|
+
readonly languageCode: _angular_core.WritableSignal<string>;
|
|
1411
|
+
/**
|
|
1412
|
+
* Extract ECharts options from chartConfig
|
|
1413
|
+
* Handles both direct format and wrapped format for backwards compatibility
|
|
1414
|
+
*/
|
|
1415
|
+
readonly chartOptions: _angular_core.Signal<any>;
|
|
1416
|
+
/** Chart width from config */
|
|
1417
|
+
readonly chartWidth: _angular_core.Signal<any>;
|
|
1418
|
+
/** Has scroll class */
|
|
1419
|
+
readonly hasScrollClass: _angular_core.Signal<boolean>;
|
|
1420
|
+
/** Container class */
|
|
1421
|
+
readonly containerClass: _angular_core.Signal<"scroll-wrapper" | "chart-wrapper">;
|
|
1422
|
+
/** Chart class */
|
|
1423
|
+
readonly chartClass: _angular_core.Signal<"chart" | "chart-scroll">;
|
|
1424
|
+
/** Show custom legend */
|
|
1425
|
+
readonly showCustomLegend: _angular_core.Signal<any>;
|
|
1426
|
+
constructor();
|
|
1427
|
+
ngOnInit(): Promise<void>;
|
|
1428
|
+
ngAfterViewInit(): void;
|
|
1429
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
1430
|
+
ngOnDestroy(): void;
|
|
1431
|
+
/**
|
|
1432
|
+
* Process legends for custom legend display
|
|
1433
|
+
*/
|
|
1434
|
+
private processLegends;
|
|
1435
|
+
/**
|
|
1436
|
+
* Toggle legend item visibility
|
|
1437
|
+
*/
|
|
1438
|
+
toggleLegendItem(item: {
|
|
1439
|
+
name: string;
|
|
1440
|
+
disabled: boolean;
|
|
1441
|
+
}): void;
|
|
1442
|
+
/**
|
|
1443
|
+
* Dynamically load ECharts
|
|
1444
|
+
*/
|
|
1445
|
+
private loadECharts;
|
|
1446
|
+
/**
|
|
1447
|
+
* Initialize chart
|
|
1448
|
+
*/
|
|
1449
|
+
private initChart;
|
|
1450
|
+
/**
|
|
1451
|
+
* Update chart with new options
|
|
1452
|
+
*/
|
|
1453
|
+
private updateChart;
|
|
1454
|
+
/**
|
|
1455
|
+
* Setup resize observer
|
|
1456
|
+
*/
|
|
1457
|
+
private setupResizeObserver;
|
|
1458
|
+
/**
|
|
1459
|
+
* Resize chart
|
|
1460
|
+
*/
|
|
1461
|
+
resize(): void;
|
|
1462
|
+
/**
|
|
1463
|
+
* Destroy chart
|
|
1464
|
+
*/
|
|
1465
|
+
private destroyChart;
|
|
1466
|
+
/**
|
|
1467
|
+
* Destroy resize observer
|
|
1468
|
+
*/
|
|
1469
|
+
private destroyResizeObserver;
|
|
1470
|
+
/**
|
|
1471
|
+
* Get chart instance
|
|
1472
|
+
*/
|
|
1473
|
+
getChartInstance(): EChartsType | null;
|
|
1474
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EChartComponent, never>;
|
|
1475
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EChartComponent, "db-echart", never, { "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; "chartConfig": { "alias": "chartConfig"; "required": false; "isSignal": true; }; "configurationItem": { "alias": "configurationItem"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "headerHidden": { "alias": "headerHidden"; "required": false; "isSignal": true; }; }, { "chartClick": "chartClick"; }, never, never, true, never>;
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
interface EntityData {
|
|
1479
|
+
key?: string;
|
|
1480
|
+
normalizedKey?: string;
|
|
1481
|
+
label?: string;
|
|
1482
|
+
value?: any;
|
|
1483
|
+
viewType?: string;
|
|
1484
|
+
settings?: any;
|
|
1485
|
+
showInfoUser?: boolean;
|
|
1486
|
+
displayAreas?: any[];
|
|
1487
|
+
}
|
|
1488
|
+
declare class EntityInfoComponent {
|
|
1489
|
+
/** Entity data to display */
|
|
1490
|
+
readonly data: _angular_core.InputSignal<EntityData | null>;
|
|
1491
|
+
/** Display type: 'entity' shows label, 'inTable' shows value only */
|
|
1492
|
+
readonly displayType: _angular_core.InputSignal<"entity" | "inTable">;
|
|
1493
|
+
/** Extra configuration */
|
|
1494
|
+
readonly extraInfoData: _angular_core.InputSignal<any>;
|
|
1495
|
+
/** Whether to limit words with ellipsis */
|
|
1496
|
+
readonly limitWords: _angular_core.InputSignal<boolean>;
|
|
1497
|
+
/** Custom CSS class */
|
|
1498
|
+
readonly customClass: _angular_core.InputSignal<string>;
|
|
1499
|
+
/** Computed viewType in lowercase */
|
|
1500
|
+
readonly viewTypeLower: _angular_core.Signal<string>;
|
|
1501
|
+
readonly textValue: _angular_core.Signal<any>;
|
|
1502
|
+
readonly numericValue: _angular_core.Signal<number | null>;
|
|
1503
|
+
readonly dateDisplayValue: _angular_core.Signal<any>;
|
|
1504
|
+
readonly currencyDisplayValue: _angular_core.Signal<any>;
|
|
1505
|
+
readonly timeDisplayValue: _angular_core.Signal<any>;
|
|
1506
|
+
readonly lookupName: _angular_core.Signal<any>;
|
|
1507
|
+
readonly lookupColor: _angular_core.Signal<any>;
|
|
1508
|
+
readonly checkboxValue: _angular_core.Signal<boolean>;
|
|
1509
|
+
readonly statusName: _angular_core.Signal<any>;
|
|
1510
|
+
readonly statusColor: _angular_core.Signal<any>;
|
|
1511
|
+
readonly percentageValue: _angular_core.Signal<number | null>;
|
|
1512
|
+
readonly percentageColor: _angular_core.Signal<any>;
|
|
1513
|
+
readonly sliderValue: _angular_core.Signal<number>;
|
|
1514
|
+
readonly userData: _angular_core.Signal<any>;
|
|
1515
|
+
readonly userName: _angular_core.Signal<any>;
|
|
1516
|
+
readonly userInitials: _angular_core.Signal<string>;
|
|
1517
|
+
readonly multiselectValues: _angular_core.Signal<any[]>;
|
|
1518
|
+
readonly multiUserValues: _angular_core.Signal<any[]>;
|
|
1519
|
+
readonly dynamicListValues: _angular_core.Signal<any[]>;
|
|
1520
|
+
readonly locationDisplayValue: _angular_core.Signal<any>;
|
|
1521
|
+
/** Get initials from name */
|
|
1522
|
+
getInitials(name: string): string;
|
|
1523
|
+
/** Format currency value */
|
|
1524
|
+
private formatCurrency;
|
|
1525
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityInfoComponent, never>;
|
|
1526
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityInfoComponent, "mt-entity-info", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "displayType": { "alias": "displayType"; "required": false; "isSignal": true; }; "extraInfoData": { "alias": "extraInfoData"; "required": false; "isSignal": true; }; "limitWords": { "alias": "limitWords"; "required": false; "isSignal": true; }; "customClass": { "alias": "customClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1527
|
+
}
|
|
1528
|
+
|
|
1529
|
+
interface PropertyItem {
|
|
1530
|
+
key: string;
|
|
1531
|
+
normalizedKey?: string;
|
|
1532
|
+
label?: string;
|
|
1533
|
+
value: any;
|
|
1534
|
+
viewType?: string;
|
|
1535
|
+
settings?: any;
|
|
1536
|
+
}
|
|
1537
|
+
interface PropertyConfig {
|
|
1538
|
+
width?: string;
|
|
1539
|
+
border?: string[];
|
|
1540
|
+
hidden?: boolean;
|
|
1541
|
+
colorAsProperty?: string;
|
|
1542
|
+
}
|
|
1543
|
+
interface ProcessedProperty {
|
|
1544
|
+
propInfo: PropertyItem;
|
|
1545
|
+
config: PropertyConfig;
|
|
1546
|
+
}
|
|
1547
|
+
declare class EntityPreviewCardComponent implements OnInit, OnDestroy {
|
|
1548
|
+
private readonly storeService;
|
|
1549
|
+
private readonly transloco;
|
|
1550
|
+
private readonly subscription;
|
|
1551
|
+
/** Dashboard ID for this card */
|
|
1552
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1553
|
+
/** Configuration item from store */
|
|
1554
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1555
|
+
/** Processed properties to display */
|
|
1556
|
+
readonly props: _angular_core.WritableSignal<ProcessedProperty[]>;
|
|
1557
|
+
/** Card title */
|
|
1558
|
+
readonly title: _angular_core.Signal<string>;
|
|
1559
|
+
ngOnInit(): void;
|
|
1560
|
+
ngOnDestroy(): void;
|
|
1561
|
+
/**
|
|
1562
|
+
* Subscribe to store updates for this dashboard ID
|
|
1563
|
+
*/
|
|
1564
|
+
private subscribeToStore;
|
|
1565
|
+
/**
|
|
1566
|
+
* Get current language code
|
|
1567
|
+
*/
|
|
1568
|
+
private getLanguageCode;
|
|
1569
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityPreviewCardComponent, never>;
|
|
1570
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityPreviewCardComponent, "mt-entity-preview-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
interface StatusItem {
|
|
1574
|
+
label: string;
|
|
1575
|
+
color: string;
|
|
1576
|
+
shape?: 'circle' | 'square';
|
|
1577
|
+
}
|
|
1578
|
+
declare class HeaderCardComponent implements OnInit, OnDestroy {
|
|
1579
|
+
private readonly storeService;
|
|
1580
|
+
private readonly transloco;
|
|
1581
|
+
private readonly subscription;
|
|
1582
|
+
/** Dashboard ID */
|
|
1583
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1584
|
+
/** Action event output */
|
|
1585
|
+
readonly onAction: _angular_core.OutputEmitterRef<{
|
|
1586
|
+
type: string;
|
|
1587
|
+
data: any;
|
|
1588
|
+
}>;
|
|
1589
|
+
/** Configuration item */
|
|
1590
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1591
|
+
/** Data handled (for dynamic text replacement) */
|
|
1592
|
+
readonly dataHandled: _angular_core.WritableSignal<any>;
|
|
1593
|
+
/** Language code */
|
|
1594
|
+
readonly langCode: _angular_core.Signal<string>;
|
|
1595
|
+
/** StyleConfig from displayConfig */
|
|
1596
|
+
readonly styleConfig: _angular_core.Signal<_masterteam_dashboard_builder.StyleConfig>;
|
|
1597
|
+
/** Card style config */
|
|
1598
|
+
readonly cardStyleConfig: _angular_core.Signal<any>;
|
|
1599
|
+
/** Cols from dimensions */
|
|
1600
|
+
readonly cols: _angular_core.Signal<number>;
|
|
1601
|
+
/** Is full width (cols == 36) */
|
|
1602
|
+
readonly isFullWidth: _angular_core.Signal<boolean>;
|
|
1603
|
+
/** Title with dynamic text replacement */
|
|
1604
|
+
readonly title: _angular_core.Signal<string>;
|
|
1605
|
+
/** Icon name */
|
|
1606
|
+
readonly icon: _angular_core.Signal<string>;
|
|
1607
|
+
/** Logo configuration */
|
|
1608
|
+
readonly logo: _angular_core.Signal<any>;
|
|
1609
|
+
/** Logo URL */
|
|
1610
|
+
readonly logoUrl: _angular_core.Signal<string | null>;
|
|
1611
|
+
/** Icon color */
|
|
1612
|
+
readonly iconColor: _angular_core.Signal<any>;
|
|
1613
|
+
/** Icon background color */
|
|
1614
|
+
readonly iconBgColor: _angular_core.Signal<any>;
|
|
1615
|
+
/** Font size for title */
|
|
1616
|
+
readonly fontSizeTitle: _angular_core.Signal<string>;
|
|
1617
|
+
/** Container styles from StyleConfig */
|
|
1618
|
+
readonly containerStyles: _angular_core.Signal<any>;
|
|
1619
|
+
/** Card styles */
|
|
1620
|
+
readonly cardStyles: _angular_core.Signal<any>;
|
|
1621
|
+
/** Status indicators */
|
|
1622
|
+
readonly statuses: _angular_core.WritableSignal<StatusItem[]>;
|
|
1623
|
+
/** Is clickable */
|
|
1624
|
+
readonly isClickable: _angular_core.Signal<boolean>;
|
|
1625
|
+
/** Show arrow */
|
|
1626
|
+
readonly showArrow: _angular_core.Signal<any>;
|
|
1627
|
+
ngOnInit(): void;
|
|
1628
|
+
private processStatuses;
|
|
1629
|
+
ngOnDestroy(): void;
|
|
1630
|
+
onTitleClick(): void;
|
|
1631
|
+
onArrowClick(): void;
|
|
1632
|
+
onClick(): void;
|
|
1633
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderCardComponent, never>;
|
|
1634
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderCardComponent, "db-header-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
interface LevelCardData$1 {
|
|
1638
|
+
id: number;
|
|
1639
|
+
name: string;
|
|
1640
|
+
currentPhase?: string;
|
|
1641
|
+
props: PropertyData[];
|
|
1642
|
+
status?: PropertyData;
|
|
1643
|
+
[key: string]: any;
|
|
1644
|
+
}
|
|
1645
|
+
interface PropertyData {
|
|
1646
|
+
key: string;
|
|
1647
|
+
normalizedKey: string;
|
|
1648
|
+
viewType: string;
|
|
1649
|
+
value: any;
|
|
1650
|
+
displayAreas?: {
|
|
1651
|
+
key: string;
|
|
1652
|
+
order: number;
|
|
1653
|
+
}[];
|
|
1654
|
+
displayArea?: {
|
|
1655
|
+
key: string;
|
|
1656
|
+
order: number;
|
|
1657
|
+
}[];
|
|
1658
|
+
}
|
|
1659
|
+
declare class LevelCardListComponent implements OnInit, OnDestroy {
|
|
1660
|
+
private readonly storeService;
|
|
1661
|
+
private readonly transloco;
|
|
1662
|
+
private readonly subscription;
|
|
1663
|
+
/** Dashboard ID */
|
|
1664
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1665
|
+
/** Whether inside a group */
|
|
1666
|
+
readonly inGroup: _angular_core.InputSignal<boolean>;
|
|
1667
|
+
/** Properties to hide */
|
|
1668
|
+
readonly hideProperties: _angular_core.InputSignal<string[]>;
|
|
1669
|
+
/** Action event output */
|
|
1670
|
+
readonly onAction: _angular_core.OutputEmitterRef<{
|
|
1671
|
+
type: string;
|
|
1672
|
+
data: any;
|
|
1673
|
+
}>;
|
|
1674
|
+
/** Configuration item */
|
|
1675
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1676
|
+
/** Card data from handler */
|
|
1677
|
+
readonly cardData: _angular_core.WritableSignal<any[][]>;
|
|
1678
|
+
/** Currently selected tab index */
|
|
1679
|
+
readonly tabSelected: _angular_core.WritableSignal<number>;
|
|
1680
|
+
/** Language code */
|
|
1681
|
+
readonly langCode: _angular_core.Signal<string>;
|
|
1682
|
+
/** Gallery mode flag */
|
|
1683
|
+
readonly galleryMode: _angular_core.Signal<boolean>;
|
|
1684
|
+
/** Tabs from config */
|
|
1685
|
+
readonly tabs: _angular_core.Signal<{
|
|
1686
|
+
ar: string | undefined;
|
|
1687
|
+
en: string | undefined;
|
|
1688
|
+
}[]>;
|
|
1689
|
+
/** Current tab data */
|
|
1690
|
+
readonly currentTabData: _angular_core.Signal<any[]>;
|
|
1691
|
+
ngOnInit(): void;
|
|
1692
|
+
ngOnDestroy(): void;
|
|
1693
|
+
/**
|
|
1694
|
+
* Get properties for card body (displayArea: levelCard_body)
|
|
1695
|
+
*/
|
|
1696
|
+
getBodyProps(card: LevelCardData$1): PropertyData[];
|
|
1697
|
+
/**
|
|
1698
|
+
* Get attachments for gallery mode
|
|
1699
|
+
*/
|
|
1700
|
+
getAttachments(card: LevelCardData$1): any[];
|
|
1701
|
+
/**
|
|
1702
|
+
* Check if card has any counters
|
|
1703
|
+
*/
|
|
1704
|
+
hasCounters(card: any): boolean;
|
|
1705
|
+
/**
|
|
1706
|
+
* Handle card click
|
|
1707
|
+
*/
|
|
1708
|
+
onCardClick(card: LevelCardData$1): void;
|
|
1709
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LevelCardListComponent, never>;
|
|
1710
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LevelCardListComponent, "mt-level-card-list", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "hideProperties": { "alias": "hideProperties"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
declare class ListStatisticCardComponent implements OnInit, OnDestroy {
|
|
1714
|
+
private readonly storeService;
|
|
1715
|
+
private readonly subscription;
|
|
1716
|
+
/** Dashboard ID */
|
|
1717
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1718
|
+
/** Configuration item - matches OLD: ConfigurationItem */
|
|
1719
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1720
|
+
/** Handled data - matches OLD: DataHandled - receives direct format from handler */
|
|
1721
|
+
readonly dataHandled: _angular_core.WritableSignal<any>;
|
|
1722
|
+
/** Style configuration - matches OLD: StyleConfig */
|
|
1723
|
+
readonly styleConfig: _angular_core.Signal<_masterteam_dashboard_builder.StyleConfig | undefined>;
|
|
1724
|
+
ngOnInit(): void;
|
|
1725
|
+
ngOnDestroy(): void;
|
|
1726
|
+
/**
|
|
1727
|
+
* DoActions - matches OLD exactly
|
|
1728
|
+
* OLD: DoActions(event: any, type: string)
|
|
1729
|
+
*/
|
|
1730
|
+
doActions(event: any, type: string): void;
|
|
1731
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListStatisticCardComponent, never>;
|
|
1732
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListStatisticCardComponent, "db-list-statistic-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
interface SkeletonConfig {
|
|
1736
|
+
width: string;
|
|
1737
|
+
height: string;
|
|
1738
|
+
}
|
|
1739
|
+
declare class SkeletonCardComponent implements OnInit, OnDestroy {
|
|
1740
|
+
private readonly storeService;
|
|
1741
|
+
private readonly subscription;
|
|
1742
|
+
/** Dashboard ID */
|
|
1743
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1744
|
+
/** Configuration item */
|
|
1745
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1746
|
+
/** Skeletons configuration */
|
|
1747
|
+
readonly skeletons: _angular_core.Signal<SkeletonConfig[]>;
|
|
1748
|
+
ngOnInit(): void;
|
|
1749
|
+
ngOnDestroy(): void;
|
|
1750
|
+
private getSkeletonsForComponent;
|
|
1751
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonCardComponent, never>;
|
|
1752
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonCardComponent, "db-skeleton-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1755
|
+
declare class StatisticCardComponent implements OnInit {
|
|
1756
|
+
/** Card config (same as old component) */
|
|
1757
|
+
readonly config: _angular_core.InputSignal<any>;
|
|
1758
|
+
/** Style config from parent */
|
|
1759
|
+
readonly styleConfig: _angular_core.InputSignal<any>;
|
|
1760
|
+
/** Configuration item from parent */
|
|
1761
|
+
readonly configurationItem: _angular_core.InputSignal<ItemConfig | null>;
|
|
1762
|
+
/** Click event - emits the config */
|
|
1763
|
+
readonly cardClick: _angular_core.OutputEmitterRef<any>;
|
|
1764
|
+
/** Path for images */
|
|
1765
|
+
pathImages: string;
|
|
1766
|
+
/** Language code */
|
|
1767
|
+
readonly languageCode: _angular_core.Signal<string>;
|
|
1768
|
+
readonly isArabic: _angular_core.Signal<boolean>;
|
|
1769
|
+
/** Show card info icon */
|
|
1770
|
+
readonly showCardInfo: _angular_core.Signal<any>;
|
|
1771
|
+
/** Card info tooltip content */
|
|
1772
|
+
readonly cardInfoTooltip: _angular_core.Signal<any>;
|
|
1773
|
+
/** Tooltip value */
|
|
1774
|
+
readonly tooltipValue: _angular_core.Signal<any>;
|
|
1775
|
+
/** Font size for value */
|
|
1776
|
+
readonly fontSizeValue: _angular_core.Signal<string | undefined>;
|
|
1777
|
+
/** Font size for title */
|
|
1778
|
+
readonly fontSizeTitle: _angular_core.Signal<string | undefined>;
|
|
1779
|
+
/** Card styles */
|
|
1780
|
+
readonly cardStyles: _angular_core.Signal<Record<string, any>>;
|
|
1781
|
+
/** Border top style */
|
|
1782
|
+
readonly borderTopStyle: _angular_core.Signal<{
|
|
1783
|
+
'border-top'?: undefined;
|
|
1784
|
+
} | {
|
|
1785
|
+
'border-top': string;
|
|
1786
|
+
}>;
|
|
1787
|
+
/** Icon styles */
|
|
1788
|
+
readonly iconStyles: _angular_core.Signal<{
|
|
1789
|
+
'background-color': any;
|
|
1790
|
+
color: any;
|
|
1791
|
+
}>;
|
|
1792
|
+
ngOnInit(): void;
|
|
1793
|
+
onClick(): void;
|
|
1794
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatisticCardComponent, never>;
|
|
1795
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatisticCardComponent, "mt-statistic-card", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "styleConfig": { "alias": "styleConfig"; "required": false; "isSignal": true; }; "configurationItem": { "alias": "configurationItem"; "required": false; "isSignal": true; }; }, { "cardClick": "cardClick"; }, never, never, true, never>;
|
|
1796
|
+
}
|
|
1797
|
+
|
|
1798
|
+
interface TableColumn {
|
|
1799
|
+
key: string;
|
|
1800
|
+
keyPure?: string;
|
|
1801
|
+
label: string;
|
|
1802
|
+
viewType?: string;
|
|
1803
|
+
columnType?: 'entity' | 'actions' | 'template' | 'drag';
|
|
1804
|
+
hideColumn?: boolean;
|
|
1805
|
+
width?: string;
|
|
1806
|
+
isSort?: boolean;
|
|
1807
|
+
isAsc?: boolean;
|
|
1808
|
+
}
|
|
1809
|
+
interface TableStyleConfig {
|
|
1810
|
+
thTextColor?: string;
|
|
1811
|
+
thBackgroundColor?: string;
|
|
1812
|
+
thFontBold?: boolean;
|
|
1813
|
+
thFontSize?: number;
|
|
1814
|
+
tdTextColor?: string;
|
|
1815
|
+
tdFontBold?: boolean;
|
|
1816
|
+
tdFontSize?: number;
|
|
1817
|
+
groupTextColor?: string;
|
|
1818
|
+
groupBackgroundColor?: string;
|
|
1819
|
+
hiddenColumns?: string[];
|
|
1820
|
+
hideTableSubheader?: boolean;
|
|
1821
|
+
hideIndex?: boolean;
|
|
1822
|
+
}
|
|
1823
|
+
declare class TableCardComponent implements OnInit, OnDestroy {
|
|
1824
|
+
private readonly storeService;
|
|
1825
|
+
private readonly transloco;
|
|
1826
|
+
private readonly subscription;
|
|
1827
|
+
/** Dashboard ID */
|
|
1828
|
+
readonly dashboardId: _angular_core.InputSignal<string | number>;
|
|
1829
|
+
/** Whether card is in a group */
|
|
1830
|
+
readonly inGroup: _angular_core.InputSignal<boolean>;
|
|
1831
|
+
/** Action event output */
|
|
1832
|
+
readonly onAction: _angular_core.OutputEmitterRef<{
|
|
1833
|
+
type: string;
|
|
1834
|
+
data: any;
|
|
1835
|
+
}>;
|
|
1836
|
+
/** Configuration item */
|
|
1837
|
+
readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
|
|
1838
|
+
/** Raw data from handler */
|
|
1839
|
+
readonly rawData: _angular_core.WritableSignal<any>;
|
|
1840
|
+
/** Loading state */
|
|
1841
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
1842
|
+
/** Columns */
|
|
1843
|
+
readonly columns: _angular_core.WritableSignal<TableColumn[]>;
|
|
1844
|
+
/** Labels for status display */
|
|
1845
|
+
readonly labels: _angular_core.WritableSignal<any[]>;
|
|
1846
|
+
/** Processed table rows */
|
|
1847
|
+
readonly tableRows: _angular_core.WritableSignal<any[]>;
|
|
1848
|
+
/** Grouped data */
|
|
1849
|
+
readonly groupedData: _angular_core.WritableSignal<any[]>;
|
|
1850
|
+
/** Title */
|
|
1851
|
+
readonly title: _angular_core.Signal<string>;
|
|
1852
|
+
/** Table style config */
|
|
1853
|
+
readonly tableStyleConfig: _angular_core.Signal<TableStyleConfig | null>;
|
|
1854
|
+
/** Whether to show index column */
|
|
1855
|
+
readonly showIndex: _angular_core.Signal<boolean>;
|
|
1856
|
+
/** Whether table is grouped */
|
|
1857
|
+
readonly isGrouped: _angular_core.Signal<boolean>;
|
|
1858
|
+
/** Has data */
|
|
1859
|
+
readonly hasData: _angular_core.Signal<boolean>;
|
|
1860
|
+
/** Visible columns (not hidden) */
|
|
1861
|
+
readonly visibleColumns: _angular_core.Signal<TableColumn[]>;
|
|
1862
|
+
/** Total columns (for colspan) */
|
|
1863
|
+
readonly totalColumns: _angular_core.Signal<number>;
|
|
1864
|
+
/** Row clickable */
|
|
1865
|
+
readonly isRowClickable: _angular_core.Signal<boolean | undefined>;
|
|
1866
|
+
ngOnInit(): void;
|
|
1867
|
+
ngOnDestroy(): void;
|
|
1868
|
+
/**
|
|
1869
|
+
* Build table columns and rows from raw data
|
|
1870
|
+
* Matches old buildTable logic in table-card.component.ts
|
|
1871
|
+
*/
|
|
1872
|
+
private buildTable;
|
|
1873
|
+
/**
|
|
1874
|
+
* Build flat (non-grouped) table
|
|
1875
|
+
*/
|
|
1876
|
+
private buildFlatTable;
|
|
1877
|
+
/**
|
|
1878
|
+
* Build grouped table
|
|
1879
|
+
*/
|
|
1880
|
+
private buildGroupedTable;
|
|
1881
|
+
/**
|
|
1882
|
+
* Get cell data for entity-info component
|
|
1883
|
+
* Returns the full entity data object { viewType, value, label }
|
|
1884
|
+
*/
|
|
1885
|
+
getCellData(row: any, column: TableColumn): any;
|
|
1886
|
+
/**
|
|
1887
|
+
* Sort column
|
|
1888
|
+
*/
|
|
1889
|
+
onSort(column: TableColumn): void;
|
|
1890
|
+
/**
|
|
1891
|
+
* Get sortable value from row
|
|
1892
|
+
*/
|
|
1893
|
+
private getSortValue;
|
|
1894
|
+
/**
|
|
1895
|
+
* Handle row click
|
|
1896
|
+
*/
|
|
1897
|
+
onRowClick(row: any): void;
|
|
1898
|
+
/**
|
|
1899
|
+
* Handle header click
|
|
1900
|
+
*/
|
|
1901
|
+
onHeaderClick(): void;
|
|
1902
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCardComponent, never>;
|
|
1903
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCardComponent, "db-table-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
declare class DashboardItemStoreService {
|
|
1907
|
+
/** Store for all dashboard items, keyed by dashboardId */
|
|
1908
|
+
private itemsStore;
|
|
1909
|
+
/** Subject for broadcasting store updates */
|
|
1910
|
+
private storeUpdates$;
|
|
1911
|
+
/** Localization data */
|
|
1912
|
+
private localization;
|
|
1913
|
+
/** Current action data per dashboard item */
|
|
1914
|
+
private actionData;
|
|
1915
|
+
/**
|
|
1916
|
+
* Initialize or update store for a dashboard item
|
|
1917
|
+
*/
|
|
1918
|
+
updateStoreForItem(dashboardId: string | number, data: Partial<DashboardItemStore>): void;
|
|
1919
|
+
/**
|
|
1920
|
+
* Get current store for a dashboard item
|
|
1921
|
+
*/
|
|
1922
|
+
getStoreForItem(dashboardId: string | number): DashboardItemStore | undefined;
|
|
1923
|
+
/**
|
|
1924
|
+
* Get current store for a dashboard item (alias for getStoreForItem)
|
|
1925
|
+
*/
|
|
1926
|
+
getStore(dashboardId: string | number): DashboardItemStore | undefined;
|
|
1927
|
+
/**
|
|
1928
|
+
* Get specific property from item store
|
|
1929
|
+
*/
|
|
1930
|
+
getItemProperty<K extends keyof DashboardItemStore>(dashboardId: string | number, key: K): DashboardItemStore[K] | undefined;
|
|
1931
|
+
/**
|
|
1932
|
+
* Select specific property from item store as Observable
|
|
1933
|
+
*/
|
|
1934
|
+
selectItemProperty$<K extends keyof DashboardItemStore>(dashboardId: string | number, key: K): Observable<DashboardItemStore[K] | undefined>;
|
|
1935
|
+
/**
|
|
1936
|
+
* Clear store for a specific item
|
|
1937
|
+
*/
|
|
1938
|
+
clearItemStore(dashboardId: string | number): void;
|
|
1939
|
+
/**
|
|
1940
|
+
* Clear all stores
|
|
1941
|
+
*/
|
|
1942
|
+
clearAllStores(): void;
|
|
1943
|
+
/**
|
|
1944
|
+
* Get configuration item for a dashboard
|
|
1945
|
+
*/
|
|
1946
|
+
getConfigurationItem(dashboardId: string | number): ItemConfig | undefined;
|
|
1947
|
+
/**
|
|
1948
|
+
* Update configuration item
|
|
1949
|
+
*/
|
|
1950
|
+
updateConfigurationItem(dashboardId: string | number, config: ItemConfig): void;
|
|
1951
|
+
/**
|
|
1952
|
+
* Get handled data for a dashboard item
|
|
1953
|
+
*/
|
|
1954
|
+
getDataHandled(dashboardId: string | number): any;
|
|
1955
|
+
/**
|
|
1956
|
+
* Trigger data fetch for an item
|
|
1957
|
+
*/
|
|
1958
|
+
triggerDataFetch(dashboardId: string | number): void;
|
|
1959
|
+
/**
|
|
1960
|
+
* Handle action type
|
|
1961
|
+
*/
|
|
1962
|
+
handleActionsType(type: string, configurationItem: Partial<ItemConfig> | any, data: any): void;
|
|
1963
|
+
/**
|
|
1964
|
+
* Get data for current action
|
|
1965
|
+
*/
|
|
1966
|
+
getDataForCurrentAction(dashboardId: string | number): any;
|
|
1967
|
+
/**
|
|
1968
|
+
* Get extra filter for current action context
|
|
1969
|
+
*/
|
|
1970
|
+
getExtraFilterForCurrentAction(dashboardId: string | number): Record<string, any>;
|
|
1971
|
+
/**
|
|
1972
|
+
* Set extra filter for an item
|
|
1973
|
+
*/
|
|
1974
|
+
setExtraFilter(dashboardId: string | number, filter: Record<string, any>): void;
|
|
1975
|
+
/**
|
|
1976
|
+
* Set query params for an item
|
|
1977
|
+
*/
|
|
1978
|
+
setQueryParams(dashboardId: string | number, params: Record<string, any>): void;
|
|
1979
|
+
/**
|
|
1980
|
+
* Get query params for an item
|
|
1981
|
+
*/
|
|
1982
|
+
getQueryParams(dashboardId: string | number): Record<string, any>;
|
|
1983
|
+
/**
|
|
1984
|
+
* Set pre-query params (params that should be merged before request)
|
|
1985
|
+
*/
|
|
1986
|
+
setPreQueryParams(dashboardId: string | number, params: Record<string, any>): void;
|
|
1987
|
+
/**
|
|
1988
|
+
* Get items that have filters applied (for batch refresh)
|
|
1989
|
+
*/
|
|
1990
|
+
getItemsWithFilters(): Array<{
|
|
1991
|
+
id: string | number;
|
|
1992
|
+
filters: Record<string, any>;
|
|
1993
|
+
}>;
|
|
1994
|
+
/**
|
|
1995
|
+
* Trigger data fetch for all items that have filters
|
|
1996
|
+
*/
|
|
1997
|
+
refreshItemsWithFilters(): void;
|
|
1998
|
+
/**
|
|
1999
|
+
* Stop actions for an item (prevent action handling)
|
|
2000
|
+
*/
|
|
2001
|
+
stopActions(dashboardId: string | number, stop?: boolean): void;
|
|
2002
|
+
/**
|
|
2003
|
+
* Set localization data
|
|
2004
|
+
*/
|
|
2005
|
+
setLocalization(data: Record<string, any>): void;
|
|
2006
|
+
/**
|
|
2007
|
+
* Get localization data
|
|
2008
|
+
*/
|
|
2009
|
+
getLocalization(): Record<string, any>;
|
|
2010
|
+
/**
|
|
2011
|
+
* Get localized value
|
|
2012
|
+
*/
|
|
2013
|
+
getLocalizedValue(key: string): string;
|
|
2014
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardItemStoreService, never>;
|
|
2015
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardItemStoreService>;
|
|
2016
|
+
}
|
|
2017
|
+
|
|
2018
|
+
declare class ChartDataService {
|
|
2019
|
+
private readonly http;
|
|
2020
|
+
private readonly transloco;
|
|
2021
|
+
private readonly itemStore;
|
|
2022
|
+
private urlPrefix;
|
|
2023
|
+
private apiVersion;
|
|
2024
|
+
private readonly handlers;
|
|
2025
|
+
private readonly passthroughFunctions;
|
|
2026
|
+
constructor();
|
|
2027
|
+
/**
|
|
2028
|
+
* Initialize URL configuration from localStorage (same as old implementation)
|
|
2029
|
+
*/
|
|
2030
|
+
private initUrlConfig;
|
|
2031
|
+
private createPassthroughResult;
|
|
2032
|
+
/**
|
|
2033
|
+
* Main entry point - fetch and process chart data
|
|
2034
|
+
*/
|
|
2035
|
+
fetchChartData(config: ItemConfig, filters?: Record<string, any>): Observable<ChartDataHandled | null>;
|
|
2036
|
+
/**
|
|
2037
|
+
* Build HTTP request based on request type
|
|
2038
|
+
*/
|
|
2039
|
+
private buildRequest;
|
|
2040
|
+
/**
|
|
2041
|
+
* Merge service config filters with runtime filters
|
|
2042
|
+
*/
|
|
2043
|
+
private mergeFilters;
|
|
2044
|
+
/**
|
|
2045
|
+
* Build HttpParams from filters
|
|
2046
|
+
*/
|
|
2047
|
+
private buildHttpParams;
|
|
2048
|
+
/**
|
|
2049
|
+
* Fetch level data
|
|
2050
|
+
*/
|
|
2051
|
+
private fetchLevelData;
|
|
2052
|
+
/**
|
|
2053
|
+
* Fetch level log data
|
|
2054
|
+
*/
|
|
2055
|
+
private fetchLevelLogData;
|
|
2056
|
+
/**
|
|
2057
|
+
* Fetch log data
|
|
2058
|
+
*/
|
|
2059
|
+
private fetchLogData;
|
|
2060
|
+
/**
|
|
2061
|
+
* Fetch custom data (uses POST like old implementation)
|
|
2062
|
+
* URL: ${urlPrefix}dashboards/${apiVersion}chart?name=${chartName}
|
|
2063
|
+
*/
|
|
2064
|
+
private fetchCustomData;
|
|
2065
|
+
/**
|
|
2066
|
+
* Build request body for custom chart requests
|
|
2067
|
+
*/
|
|
2068
|
+
private buildCustomRequestBody;
|
|
2069
|
+
/**
|
|
2070
|
+
* Fetch snapshot data
|
|
2071
|
+
* URL: ${urlPrefix}dashboards/${apiVersion}GetSnapShotInfo/${levelId?/}${timeFrame}?year=${year}
|
|
2072
|
+
*/
|
|
2073
|
+
private fetchSnapshotData;
|
|
2074
|
+
/**
|
|
2075
|
+
* Fetch level cards data
|
|
2076
|
+
* URL: ${urlPrefix}Dashboards/${apiVersion}GetCards/${selector}
|
|
2077
|
+
*/
|
|
2078
|
+
private fetchLevelCardsData;
|
|
2079
|
+
/**
|
|
2080
|
+
* Fetch timeline dependencies
|
|
2081
|
+
* URL: ${urlPrefix}dashboards/${apiVersion}ProjectsDependancies
|
|
2082
|
+
*/
|
|
2083
|
+
private fetchTimelineDependencies;
|
|
2084
|
+
/**
|
|
2085
|
+
* Fetch custom S+ data
|
|
2086
|
+
*/
|
|
2087
|
+
private fetchCustomSplusData;
|
|
2088
|
+
/**
|
|
2089
|
+
* Fetch phase gate data
|
|
2090
|
+
* URL: ${urlPrefix}api/Levels/${levelId}/PhaseGates
|
|
2091
|
+
*/
|
|
2092
|
+
private fetchPhaseGateData;
|
|
2093
|
+
/**
|
|
2094
|
+
* Fetch data from custom API (customApi.customApiUrl)
|
|
2095
|
+
*/
|
|
2096
|
+
private fetchCustomApiData;
|
|
2097
|
+
/**
|
|
2098
|
+
* Process chart data using appropriate handler method
|
|
2099
|
+
* DYNAMIC pattern: Find handler that has the functionName method and call it
|
|
2100
|
+
*/
|
|
2101
|
+
processChartData(data: any, config: ItemConfig): ChartDataHandled;
|
|
2102
|
+
/**
|
|
2103
|
+
* Get language code
|
|
2104
|
+
*/
|
|
2105
|
+
getLanguageCode(): string;
|
|
2106
|
+
/**
|
|
2107
|
+
* Trigger refresh for a specific item
|
|
2108
|
+
*/
|
|
2109
|
+
refreshItem(dashboardId: string | number): void;
|
|
2110
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartDataService, never>;
|
|
2111
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChartDataService>;
|
|
2112
|
+
}
|
|
2113
|
+
|
|
2114
|
+
declare class BarChartHandler {
|
|
2115
|
+
/**
|
|
2116
|
+
* handleBarChart - matches functionName from CHART_TYPES
|
|
2117
|
+
* Returns ECharts option directly (exactly like old BarChartService.handleBarChart)
|
|
2118
|
+
*/
|
|
2119
|
+
handleBarChart(dataResponse: any, config: ItemConfig): any;
|
|
2120
|
+
/**
|
|
2121
|
+
* Format X axis value
|
|
2122
|
+
*/
|
|
2123
|
+
private formatXAxis;
|
|
2124
|
+
/**
|
|
2125
|
+
* Apply bar override configurations
|
|
2126
|
+
*/
|
|
2127
|
+
private applyBarOverrides;
|
|
2128
|
+
/**
|
|
2129
|
+
* Build grouped bar chart
|
|
2130
|
+
*/
|
|
2131
|
+
private buildGroupedBarChart;
|
|
2132
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartHandler, never>;
|
|
2133
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BarChartHandler>;
|
|
2134
|
+
}
|
|
2135
|
+
|
|
2136
|
+
declare class PieChartHandler {
|
|
2137
|
+
/**
|
|
2138
|
+
* handleDonutChart - matches functionName from CHART_TYPES
|
|
2139
|
+
* Returns ECharts option directly (exactly like old DountChartService.handleDonutChart)
|
|
2140
|
+
*/
|
|
2141
|
+
handleDonutChart(dataResponse: any, config: ItemConfig): any;
|
|
2142
|
+
/**
|
|
2143
|
+
* Normalize chart data - aggregate duplicate labels
|
|
2144
|
+
* Exactly matches old DountChartService.normalizeChartData
|
|
2145
|
+
*/
|
|
2146
|
+
normalizeChartData(data: any): {
|
|
2147
|
+
labels: any[];
|
|
2148
|
+
values: any[];
|
|
2149
|
+
};
|
|
2150
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieChartHandler, never>;
|
|
2151
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PieChartHandler>;
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
declare class StackBarChartHandler {
|
|
2155
|
+
/**
|
|
2156
|
+
* Helper method to convert legend position based on language
|
|
2157
|
+
*/
|
|
2158
|
+
private getLegendPositionX;
|
|
2159
|
+
/**
|
|
2160
|
+
* handleStackBarChart - matches functionName from CHART_TYPES
|
|
2161
|
+
*/
|
|
2162
|
+
handleStackBarChart(dataResponse: any, config: ItemConfig): any;
|
|
2163
|
+
private buildSingleDefaultOption;
|
|
2164
|
+
private buildGroupedStackedOption;
|
|
2165
|
+
private removeDuplicatedKeys;
|
|
2166
|
+
private findStackInfo;
|
|
2167
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackBarChartHandler, never>;
|
|
2168
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<StackBarChartHandler>;
|
|
2169
|
+
}
|
|
2170
|
+
/**
|
|
2171
|
+
* Centralized x-axis formatting utilities
|
|
2172
|
+
*/
|
|
2173
|
+
declare const axisFormatters: Record<string, {
|
|
2174
|
+
formatValue: (dateValue: string, formatConfig: any) => string;
|
|
2175
|
+
preprocessData?: (stacks: any[], formatConfig: any) => any;
|
|
2176
|
+
findCategoryData?: (processedStacks: any[], xAxisKey: string, xAxisLabels: Map<string, string>) => any;
|
|
2177
|
+
}>;
|
|
2178
|
+
declare function groupDatesByYearAndMonth(data: any[], valueAggregator?: (values: number[]) => number): any[];
|
|
2179
|
+
|
|
2180
|
+
declare class GaugeChartHandler {
|
|
2181
|
+
/**
|
|
2182
|
+
* handleGaugeChart - matches functionName from CHART_TYPES
|
|
2183
|
+
* Returns ECharts config directly (exactly like old GaugeChartService)
|
|
2184
|
+
*/
|
|
2185
|
+
handleGaugeChart(dataResponse: any, config: ItemConfig): any;
|
|
2186
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GaugeChartHandler, never>;
|
|
2187
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<GaugeChartHandler>;
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2190
|
+
declare class TableViewHandler {
|
|
2191
|
+
/**
|
|
2192
|
+
* handleTableView - matches functionName from CHART_TYPES
|
|
2193
|
+
* Returns data directly (not wrapped in { type, data, config })
|
|
2194
|
+
*/
|
|
2195
|
+
handleTableView(dataResponse: any, config: ItemConfig): any;
|
|
2196
|
+
/**
|
|
2197
|
+
* Handle projects by execution period (special case)
|
|
2198
|
+
* Returns eCharts bar chart config directly (like old HandleProjectsByExecutionPeriod)
|
|
2199
|
+
*/
|
|
2200
|
+
private handleProjectsByExecutionPeriod;
|
|
2201
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableViewHandler, never>;
|
|
2202
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TableViewHandler>;
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2205
|
+
declare class OverviewCardHandler {
|
|
2206
|
+
/**
|
|
2207
|
+
* handleOverviewCard - matches functionName from CHART_TYPES
|
|
2208
|
+
* Returns EXACT same format as old OverviewCardService
|
|
2209
|
+
*/
|
|
2210
|
+
handleOverviewCard(data: any, config: ItemConfig): any;
|
|
2211
|
+
/**
|
|
2212
|
+
* Handle special case values (same as old)
|
|
2213
|
+
*/
|
|
2214
|
+
private handleSpecialCase;
|
|
2215
|
+
/**
|
|
2216
|
+
* Get current week of year (same as old)
|
|
2217
|
+
*/
|
|
2218
|
+
private getCurrentWeekOfYear;
|
|
2219
|
+
/**
|
|
2220
|
+
* handleProperties - for entityPreview component
|
|
2221
|
+
* Returns dataResponse directly - the component handles transformation
|
|
2222
|
+
* (same as old PropertiesService.handleProperties)
|
|
2223
|
+
*/
|
|
2224
|
+
handleProperties(dataResponse: any, config: ItemConfig): any;
|
|
2225
|
+
/**
|
|
2226
|
+
* handleHeader - for header component
|
|
2227
|
+
* Extracts title from first value (same as old PropertiesService.handleHeader)
|
|
2228
|
+
*/
|
|
2229
|
+
handleHeader(data: any, config: ItemConfig): any;
|
|
2230
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OverviewCardHandler, never>;
|
|
2231
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<OverviewCardHandler>;
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
declare class TimelineHandler {
|
|
2235
|
+
/**
|
|
2236
|
+
* handleTimeline - Single level timeline
|
|
2237
|
+
* Matches old TimelineService.handleTimeline exactly
|
|
2238
|
+
*/
|
|
2239
|
+
handleTimeline(data: any, config: ItemConfig): any;
|
|
2240
|
+
/**
|
|
2241
|
+
* handleTimelineV2MultiLevel - matches functionName from CHART_TYPES
|
|
2242
|
+
* Returns timeline data directly (not wrapped) like old TimelineService.
|
|
2243
|
+
* Format: { calendarOptions: {...}, ...data }
|
|
2244
|
+
*/
|
|
2245
|
+
handleTimelineV2MultiLevel(dataResponse: any, config: ItemConfig): any;
|
|
2246
|
+
/**
|
|
2247
|
+
* Helper to handle value cases (name or value directly)
|
|
2248
|
+
*/
|
|
2249
|
+
private handleCasesForValue;
|
|
2250
|
+
/**
|
|
2251
|
+
* Helper function to find parent resource recursively
|
|
2252
|
+
*/
|
|
2253
|
+
private findParentResource;
|
|
2254
|
+
/**
|
|
2255
|
+
* Handle multi-level timeline (alias for handleTimelineV2MultiLevel)
|
|
2256
|
+
* Used for hierarchical timeline views.
|
|
2257
|
+
* Returns data directly like handleTimelineV2MultiLevel.
|
|
2258
|
+
*/
|
|
2259
|
+
handleMultiLevel(dataResponse: any, config: ItemConfig): any;
|
|
2260
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimelineHandler, never>;
|
|
2261
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TimelineHandler>;
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
declare class LineChartHandler {
|
|
2265
|
+
/**
|
|
2266
|
+
* handleLineChart - matches functionName from CHART_TYPES
|
|
2267
|
+
* Returns ECharts config directly with noData, width, divClass properties
|
|
2268
|
+
*/
|
|
2269
|
+
handleLineChart(dataResponse: any, config: ItemConfig): any;
|
|
2270
|
+
/**
|
|
2271
|
+
* Build ECharts configuration
|
|
2272
|
+
*/
|
|
2273
|
+
private buildChartOption;
|
|
2274
|
+
/**
|
|
2275
|
+
* Get default color for series index
|
|
2276
|
+
*/
|
|
2277
|
+
private getDefaultColor;
|
|
2278
|
+
/**
|
|
2279
|
+
* Convert hex to rgba
|
|
2280
|
+
*/
|
|
2281
|
+
private hexToRgba;
|
|
2282
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChartHandler, never>;
|
|
2283
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<LineChartHandler>;
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
declare class SnapshotHandler {
|
|
2287
|
+
/**
|
|
2288
|
+
* handleSnapShot - matches functionName from CHART_TYPES
|
|
2289
|
+
* Returns ECharts option directly (same as old SnapShotService)
|
|
2290
|
+
*/
|
|
2291
|
+
handleSnapShot(data: any, config: ItemConfig): any;
|
|
2292
|
+
/**
|
|
2293
|
+
* Handle snapshot line chart (default)
|
|
2294
|
+
* Returns ECharts option directly
|
|
2295
|
+
*/
|
|
2296
|
+
handleSnapShotLineChart(data: any, config: ItemConfig): any;
|
|
2297
|
+
/**
|
|
2298
|
+
* Handle snapshot line bar chart
|
|
2299
|
+
* Returns ECharts option directly
|
|
2300
|
+
*/
|
|
2301
|
+
handleSnapShotLineBarChart(data: any, config: ItemConfig): any;
|
|
2302
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SnapshotHandler, never>;
|
|
2303
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SnapshotHandler>;
|
|
2304
|
+
}
|
|
2305
|
+
|
|
2306
|
+
declare class ComparisonChartHandler {
|
|
2307
|
+
/**
|
|
2308
|
+
* Main handler for comparison charts
|
|
2309
|
+
* Returns ECharts config directly with noData, width, divClass properties
|
|
2310
|
+
* (matches old ComparisonChartService.handleComparisonChart format)
|
|
2311
|
+
*/
|
|
2312
|
+
handle(dataResponse: any, config: ItemConfig): any;
|
|
2313
|
+
/**
|
|
2314
|
+
* Year over Year comparison handler
|
|
2315
|
+
* Returns ECharts config directly with noData, width, divClass properties
|
|
2316
|
+
*/
|
|
2317
|
+
handleYearOverYear(dataResponse: any, config: ItemConfig): any;
|
|
2318
|
+
/**
|
|
2319
|
+
* Planned vs Actual comparison
|
|
2320
|
+
* Returns ECharts config directly with noData, width, divClass properties
|
|
2321
|
+
*/
|
|
2322
|
+
handlePlannedVsActual(dataResponse: any, config: ItemConfig): any;
|
|
2323
|
+
/**
|
|
2324
|
+
* Parse generic comparison data
|
|
2325
|
+
*/
|
|
2326
|
+
private parseComparisonData;
|
|
2327
|
+
/**
|
|
2328
|
+
* Parse Year over Year data
|
|
2329
|
+
*/
|
|
2330
|
+
private parseYoYData;
|
|
2331
|
+
/**
|
|
2332
|
+
* Parse Planned vs Actual data
|
|
2333
|
+
*/
|
|
2334
|
+
private parsePlannedActualData;
|
|
2335
|
+
/**
|
|
2336
|
+
* Build comparison bar chart
|
|
2337
|
+
*/
|
|
2338
|
+
private buildComparisonChart;
|
|
2339
|
+
/**
|
|
2340
|
+
* Build Year over Year chart
|
|
2341
|
+
*/
|
|
2342
|
+
private buildYoYChart;
|
|
2343
|
+
/**
|
|
2344
|
+
* Build Planned vs Actual chart with variance indicators
|
|
2345
|
+
*/
|
|
2346
|
+
private buildPlannedActualChart;
|
|
2347
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComparisonChartHandler, never>;
|
|
2348
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ComparisonChartHandler>;
|
|
2349
|
+
}
|
|
2350
|
+
|
|
2351
|
+
declare class SplitterChartHandler {
|
|
2352
|
+
/**
|
|
2353
|
+
* handleSplitterChart - matches functionName from CHART_TYPES
|
|
2354
|
+
* Returns data directly in the format:
|
|
2355
|
+
* {
|
|
2356
|
+
* negative: { labels: string[], groupedValue: number },
|
|
2357
|
+
* positive: { labels: string[], groupedValue: number }
|
|
2358
|
+
* }
|
|
2359
|
+
*/
|
|
2360
|
+
handleSplitterChart(dataResponse: any, config: ItemConfig): any;
|
|
2361
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SplitterChartHandler, never>;
|
|
2362
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SplitterChartHandler>;
|
|
2363
|
+
}
|
|
2364
|
+
|
|
2365
|
+
interface LevelCardData {
|
|
2366
|
+
id: string | number;
|
|
2367
|
+
name: string;
|
|
2368
|
+
level?: {
|
|
2369
|
+
id: number;
|
|
2370
|
+
name: string;
|
|
2371
|
+
order: number;
|
|
2372
|
+
};
|
|
2373
|
+
status?: {
|
|
2374
|
+
name: string;
|
|
2375
|
+
color: string;
|
|
2376
|
+
};
|
|
2377
|
+
properties: LevelCardProperty[];
|
|
2378
|
+
extraData?: Record<string, any>;
|
|
2379
|
+
show?: boolean;
|
|
2380
|
+
}
|
|
2381
|
+
interface LevelCardProperty {
|
|
2382
|
+
key: string;
|
|
2383
|
+
normalizedKey: string;
|
|
2384
|
+
label: string;
|
|
2385
|
+
value: any;
|
|
2386
|
+
displayValue?: string;
|
|
2387
|
+
viewType?: string;
|
|
2388
|
+
color?: string;
|
|
2389
|
+
icon?: string;
|
|
2390
|
+
}
|
|
2391
|
+
declare class LevelCardHandler {
|
|
2392
|
+
/**
|
|
2393
|
+
* handlelevelCards - matches functionName from CHART_TYPES
|
|
2394
|
+
* Returns data directly like old LevelCardService:
|
|
2395
|
+
* result?.map(data => data?.details?.map(...).sort(...))
|
|
2396
|
+
*/
|
|
2397
|
+
handlelevelCards(result: any, config: ItemConfig): any;
|
|
2398
|
+
/**
|
|
2399
|
+
* handlelevelCardsWithFilter - matches functionName from CHART_TYPES
|
|
2400
|
+
* Returns data directly like old LevelCardService:
|
|
2401
|
+
* [[{ data: levelProps }]]
|
|
2402
|
+
*/
|
|
2403
|
+
handlelevelCardsWithFilter(result: any, config: ItemConfig): any;
|
|
2404
|
+
/**
|
|
2405
|
+
* Handle grouped level cards (multiple selections)
|
|
2406
|
+
* Returns data directly
|
|
2407
|
+
*/
|
|
2408
|
+
handleGrouped(dataResponse: any[], config: ItemConfig): any;
|
|
2409
|
+
/**
|
|
2410
|
+
* Parse level cards from details array (standard API response)
|
|
2411
|
+
*/
|
|
2412
|
+
private parseLevelCards;
|
|
2413
|
+
/**
|
|
2414
|
+
* Parse level cards with filter (values array format)
|
|
2415
|
+
*/
|
|
2416
|
+
private parseLevelCardsWithFilter;
|
|
2417
|
+
/**
|
|
2418
|
+
* Parse a single card detail
|
|
2419
|
+
*/
|
|
2420
|
+
private parseCardDetail;
|
|
2421
|
+
/**
|
|
2422
|
+
* Get display value from property
|
|
2423
|
+
*/
|
|
2424
|
+
private getDisplayValue;
|
|
2425
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LevelCardHandler, never>;
|
|
2426
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<LevelCardHandler>;
|
|
2427
|
+
}
|
|
2428
|
+
|
|
2429
|
+
declare class MapChartHandler {
|
|
2430
|
+
private mapCity;
|
|
2431
|
+
/**
|
|
2432
|
+
* handleMapChart - for ECharts geo map
|
|
2433
|
+
* Returns ECharts option directly
|
|
2434
|
+
*/
|
|
2435
|
+
handleMapChart(dataResponse: any, config: ItemConfig): any;
|
|
2436
|
+
/**
|
|
2437
|
+
* handleLeafletMap - matches functionName from CHART_TYPES
|
|
2438
|
+
* Returns data directly as array of grouped records
|
|
2439
|
+
*/
|
|
2440
|
+
handleLeafletMap(dataResponse: any, config: ItemConfig): any;
|
|
2441
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MapChartHandler, never>;
|
|
2442
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MapChartHandler>;
|
|
2443
|
+
}
|
|
2444
|
+
|
|
2445
|
+
declare class RingGaugeChartHandler {
|
|
2446
|
+
private colorByPropMap;
|
|
2447
|
+
/**
|
|
2448
|
+
* handleRingGaugeChart - matches functionName from CHART_TYPES
|
|
2449
|
+
* Returns ECharts option directly (same as old RingGaugeChartService)
|
|
2450
|
+
*/
|
|
2451
|
+
handleRingGaugeChart(dataResponse: any, config: ItemConfig): any;
|
|
2452
|
+
/**
|
|
2453
|
+
* Helper method to return empty chart options
|
|
2454
|
+
*/
|
|
2455
|
+
private getEmptyChartOptions;
|
|
2456
|
+
/**
|
|
2457
|
+
* Helper method to extract numeric value from various value types
|
|
2458
|
+
*/
|
|
2459
|
+
private extractNumericValue;
|
|
2460
|
+
/**
|
|
2461
|
+
* Build color by property map
|
|
2462
|
+
*/
|
|
2463
|
+
private buildColorByPropertyMap;
|
|
2464
|
+
/**
|
|
2465
|
+
* Add legend graphics to options
|
|
2466
|
+
*/
|
|
2467
|
+
private addLegendGraphics;
|
|
2468
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RingGaugeChartHandler, never>;
|
|
2469
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RingGaugeChartHandler>;
|
|
2470
|
+
}
|
|
2471
|
+
|
|
2472
|
+
declare class SPlusChartHandler {
|
|
2473
|
+
private generalService;
|
|
2474
|
+
/**
|
|
2475
|
+
* Handle S+ Gauge Chart - returns ECharts option directly
|
|
2476
|
+
* Matches old SplusChartsService.handleGaugeChartSplus return format
|
|
2477
|
+
*/
|
|
2478
|
+
handleGaugeChartSplus(data: any, config: ItemConfig): any;
|
|
2479
|
+
/**
|
|
2480
|
+
* Handle S+ Component Cards Chart - returns transformed array directly
|
|
2481
|
+
* Matches old SplusChartsService.handleComponentsCardsChart return format
|
|
2482
|
+
*/
|
|
2483
|
+
handleComponentsCardsChart(data: any, _config: ItemConfig): any;
|
|
2484
|
+
/**
|
|
2485
|
+
* Handle S+ progress chart
|
|
2486
|
+
*/
|
|
2487
|
+
handleProgress(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2488
|
+
/**
|
|
2489
|
+
* Handle S+ KPIs display
|
|
2490
|
+
*/
|
|
2491
|
+
handleKPIs(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2492
|
+
/**
|
|
2493
|
+
* Handle S+ weighted progress
|
|
2494
|
+
*/
|
|
2495
|
+
handleWeightedProgress(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2496
|
+
/**
|
|
2497
|
+
* Handle S+ milestone timeline
|
|
2498
|
+
*/
|
|
2499
|
+
handleMilestones(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2500
|
+
/**
|
|
2501
|
+
* Parse progress data
|
|
2502
|
+
*/
|
|
2503
|
+
private parseProgressData;
|
|
2504
|
+
/**
|
|
2505
|
+
* Parse KPI data
|
|
2506
|
+
*/
|
|
2507
|
+
private parseKPIData;
|
|
2508
|
+
/**
|
|
2509
|
+
* Parse milestone data
|
|
2510
|
+
*/
|
|
2511
|
+
private parseMilestoneData;
|
|
2512
|
+
/**
|
|
2513
|
+
* Build progress bar chart
|
|
2514
|
+
*/
|
|
2515
|
+
private buildProgressChart;
|
|
2516
|
+
/**
|
|
2517
|
+
* Build weighted progress chart with summary gauge
|
|
2518
|
+
*/
|
|
2519
|
+
private buildWeightedProgressChart;
|
|
2520
|
+
/**
|
|
2521
|
+
* Handle S+ gauge chart (handleGaugeChartSplus)
|
|
2522
|
+
*/
|
|
2523
|
+
handleGauge(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2524
|
+
/**
|
|
2525
|
+
* Handle S+ component cards (handleComponentsCardsChart)
|
|
2526
|
+
*/
|
|
2527
|
+
handleComponentCards(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2528
|
+
/**
|
|
2529
|
+
* Get color based on status
|
|
2530
|
+
*/
|
|
2531
|
+
private getStatusColor;
|
|
2532
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SPlusChartHandler, never>;
|
|
2533
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SPlusChartHandler>;
|
|
2534
|
+
}
|
|
2535
|
+
|
|
2536
|
+
interface PhaseGateStep {
|
|
2537
|
+
id: string | number;
|
|
2538
|
+
name: string;
|
|
2539
|
+
order: number;
|
|
2540
|
+
status: 'completed' | 'current' | 'upcoming' | 'skipped';
|
|
2541
|
+
date?: string;
|
|
2542
|
+
completedDate?: string;
|
|
2543
|
+
color?: string;
|
|
2544
|
+
icon?: string;
|
|
2545
|
+
properties?: PhaseGateProperty[];
|
|
2546
|
+
}
|
|
2547
|
+
interface PhaseGateProperty {
|
|
2548
|
+
key: string;
|
|
2549
|
+
label: string;
|
|
2550
|
+
value: any;
|
|
2551
|
+
displayValue?: string;
|
|
2552
|
+
viewType?: string;
|
|
2553
|
+
}
|
|
2554
|
+
declare class PhaseGateStepperHandler {
|
|
2555
|
+
/**
|
|
2556
|
+
* handlePhaseGateStepperCard - matches functionName from CHART_TYPES
|
|
2557
|
+
* Returns data directly matching old PhaseGateStepperService format
|
|
2558
|
+
*/
|
|
2559
|
+
handlePhaseGateStepperCard(data: any, _configurationItem: any): any;
|
|
2560
|
+
/**
|
|
2561
|
+
* Handle phase gate for table display
|
|
2562
|
+
*/
|
|
2563
|
+
handleTable(dataResponse: any, config: ItemConfig): ChartDataHandled;
|
|
2564
|
+
/**
|
|
2565
|
+
* Parse phase gate data from API response
|
|
2566
|
+
*/
|
|
2567
|
+
private parsePhaseGateData;
|
|
2568
|
+
/**
|
|
2569
|
+
* Determine step status
|
|
2570
|
+
*/
|
|
2571
|
+
private determineStepStatus;
|
|
2572
|
+
/**
|
|
2573
|
+
* Get color based on status
|
|
2574
|
+
*/
|
|
2575
|
+
private getStatusColor;
|
|
2576
|
+
/**
|
|
2577
|
+
* Parse step properties
|
|
2578
|
+
*/
|
|
2579
|
+
private parseStepProperties;
|
|
2580
|
+
/**
|
|
2581
|
+
* Get display value from property
|
|
2582
|
+
*/
|
|
2583
|
+
private getDisplayValue;
|
|
2584
|
+
/**
|
|
2585
|
+
* Build table columns from steps
|
|
2586
|
+
*/
|
|
2587
|
+
private buildTableColumns;
|
|
2588
|
+
/**
|
|
2589
|
+
* Build table rows from steps
|
|
2590
|
+
*/
|
|
2591
|
+
private buildTableRows;
|
|
2592
|
+
/**
|
|
2593
|
+
* Get localized status label
|
|
2594
|
+
*/
|
|
2595
|
+
private getStatusLabel;
|
|
2596
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PhaseGateStepperHandler, never>;
|
|
2597
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PhaseGateStepperHandler>;
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2600
|
+
/**
|
|
2601
|
+
* Formatters
|
|
2602
|
+
*
|
|
2603
|
+
* Number, currency, and date formatting utilities.
|
|
2604
|
+
*/
|
|
2605
|
+
/**
|
|
2606
|
+
* Get current language code from localStorage
|
|
2607
|
+
*/
|
|
2608
|
+
declare function getLanguageCode(): string;
|
|
2609
|
+
/**
|
|
2610
|
+
* Format large numbers with suffixes (K, M, B, T)
|
|
2611
|
+
*/
|
|
2612
|
+
declare function formatCurrency(value: number | string | null | undefined, config?: {
|
|
2613
|
+
type?: 'currency';
|
|
2614
|
+
showCurrency?: boolean;
|
|
2615
|
+
handleLang?: boolean;
|
|
2616
|
+
decimals?: number;
|
|
2617
|
+
}): string;
|
|
2618
|
+
/**
|
|
2619
|
+
* Format percentage value
|
|
2620
|
+
*/
|
|
2621
|
+
declare function formatPercentage(value: number | string | null | undefined, decimals?: number): string;
|
|
2622
|
+
/**
|
|
2623
|
+
* Format number with locale
|
|
2624
|
+
*/
|
|
2625
|
+
declare function formatNumber(value: number | string | null | undefined, options?: Intl.NumberFormatOptions): string;
|
|
2626
|
+
/**
|
|
2627
|
+
* Format date
|
|
2628
|
+
*/
|
|
2629
|
+
declare function formatDate(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long' | 'full'): string;
|
|
2630
|
+
/**
|
|
2631
|
+
* Formatter for ECharts axis labels
|
|
2632
|
+
*/
|
|
2633
|
+
declare function createAxisFormatter(config?: {
|
|
2634
|
+
maxLength?: number;
|
|
2635
|
+
handleLang?: boolean;
|
|
2636
|
+
}): (value: string | number) => string;
|
|
2637
|
+
/**
|
|
2638
|
+
* Formatter for ECharts tooltip values
|
|
2639
|
+
*/
|
|
2640
|
+
declare function createTooltipFormatter(config?: {
|
|
2641
|
+
type?: 'currency' | 'percentage' | 'number';
|
|
2642
|
+
}): (value: number) => string;
|
|
2643
|
+
/**
|
|
2644
|
+
* Format words with underscores for display
|
|
2645
|
+
* @param text - Text to format
|
|
2646
|
+
* @param maxLength - Optional max length to truncate to
|
|
2647
|
+
*/
|
|
2648
|
+
declare function formatWordsUnderBar(text: string, maxLength?: number): string;
|
|
2649
|
+
|
|
2650
|
+
/**
|
|
2651
|
+
* Chart Helpers
|
|
2652
|
+
*
|
|
2653
|
+
* Utility functions for chart data manipulation.
|
|
2654
|
+
*/
|
|
2655
|
+
|
|
2656
|
+
/**
|
|
2657
|
+
* General configuration for charts (matches old generalConfigration)
|
|
2658
|
+
*/
|
|
2659
|
+
declare const generalConfiguration: {
|
|
2660
|
+
fontConfig: {
|
|
2661
|
+
fontFamily: string;
|
|
2662
|
+
fontSizeConfig: {
|
|
2663
|
+
label: number;
|
|
2664
|
+
legend: number;
|
|
2665
|
+
category: number;
|
|
2666
|
+
tooltip: number;
|
|
2667
|
+
};
|
|
2668
|
+
};
|
|
2669
|
+
generalFilter: {
|
|
2670
|
+
show: boolean;
|
|
2671
|
+
};
|
|
2672
|
+
};
|
|
2673
|
+
/**
|
|
2674
|
+
* Format value based on config format (matches old Formater function)
|
|
2675
|
+
*/
|
|
2676
|
+
declare function formatValue(value: any, configFormat: any): any;
|
|
2677
|
+
/**
|
|
2678
|
+
* Add commas to number for display (same as old)
|
|
2679
|
+
*/
|
|
2680
|
+
declare function addCommasToNumber(num: string | number): string;
|
|
2681
|
+
/**
|
|
2682
|
+
* Convert all object keys to lowercase
|
|
2683
|
+
*/
|
|
2684
|
+
declare function switchAllKeysToLower<T extends Record<string, any>>(obj: T | null | undefined): Record<string, any>;
|
|
2685
|
+
/**
|
|
2686
|
+
* Alias for switchAllKeysToLower (matches old generalFuctions naming)
|
|
2687
|
+
*/
|
|
2688
|
+
declare const switchAllKeysSmall: typeof switchAllKeysToLower;
|
|
2689
|
+
/**
|
|
2690
|
+
* Get nested data from object using dot notation path
|
|
2691
|
+
*/
|
|
2692
|
+
declare function getNestedData(key: string, item: any): any;
|
|
2693
|
+
/**
|
|
2694
|
+
* Dynamic text replacement with placeholders
|
|
2695
|
+
* Replaces {{key}} patterns with values from the data object
|
|
2696
|
+
*/
|
|
2697
|
+
declare function dynamicTextReplace(text: string | null | undefined, data: Record<string, any> | null | undefined): string;
|
|
2698
|
+
/**
|
|
2699
|
+
* Dynamic reorder array based on order config
|
|
2700
|
+
* Supports both object syntax and individual parameters
|
|
2701
|
+
* Compatible with old format: { order: string[], operation?: string }
|
|
2702
|
+
*/
|
|
2703
|
+
declare function dynamicReorder<T>(arrayOrConfig: T[] | {
|
|
2704
|
+
array: T[];
|
|
2705
|
+
orderConfig?: {
|
|
2706
|
+
order?: string[];
|
|
2707
|
+
operation?: string;
|
|
2708
|
+
} | Record<string, number>;
|
|
2709
|
+
path?: string;
|
|
2710
|
+
}, orderConfig?: {
|
|
2711
|
+
order?: string[];
|
|
2712
|
+
operation?: string;
|
|
2713
|
+
} | Record<string, number>, path?: string): T[];
|
|
2714
|
+
/**
|
|
2715
|
+
* Sort chart data based on value
|
|
2716
|
+
* Returns { sortedData, sortedXAxis } like old implementation
|
|
2717
|
+
*/
|
|
2718
|
+
declare function sortChartData<T extends {
|
|
2719
|
+
value?: number;
|
|
2720
|
+
}>(data: T[], xAxisData?: string[], config?: {
|
|
2721
|
+
key?: string;
|
|
2722
|
+
direction?: 'asc' | 'desc';
|
|
2723
|
+
type?: 'string' | 'number' | 'date';
|
|
2724
|
+
enable?: boolean;
|
|
2725
|
+
}): {
|
|
2726
|
+
sortedData: T[];
|
|
2727
|
+
sortedXAxis: string[];
|
|
2728
|
+
} | null;
|
|
2729
|
+
/**
|
|
2730
|
+
* Sort table view data
|
|
2731
|
+
*/
|
|
2732
|
+
declare function sortDataTableView(data: any[], sortConfig: {
|
|
2733
|
+
key: string;
|
|
2734
|
+
direction: 'asc' | 'desc';
|
|
2735
|
+
}): any[];
|
|
2736
|
+
/**
|
|
2737
|
+
* Get localized title from object
|
|
2738
|
+
*/
|
|
2739
|
+
declare function getLocalizedTitle(titleObj: {
|
|
2740
|
+
en?: string;
|
|
2741
|
+
ar?: string;
|
|
2742
|
+
} | string | null | undefined): string;
|
|
2743
|
+
/**
|
|
2744
|
+
* Check if running on mobile platform
|
|
2745
|
+
*/
|
|
2746
|
+
declare function isMobilePlatform(): boolean;
|
|
2747
|
+
/**
|
|
2748
|
+
* Get color from indexed color conditions
|
|
2749
|
+
* Matches old getColorFromConditions behavior
|
|
2750
|
+
*/
|
|
2751
|
+
declare function getColorFromConditions(conditions: any[] | undefined, index: number, value: any): string | undefined;
|
|
2752
|
+
|
|
2753
|
+
declare function handleFiltersForCustom(configItem: any, params: any, extraFilters?: any): any;
|
|
2754
|
+
declare function handleFilterForCard(filters: any, params: any): any;
|
|
2755
|
+
declare function handleFilterForSnapshot(levelId: any, params: any): string;
|
|
2756
|
+
|
|
2757
|
+
/**
|
|
2758
|
+
* Event emitted when a dashboard action is triggered
|
|
2759
|
+
*/
|
|
2760
|
+
interface DashboardListEvent {
|
|
2761
|
+
type: 'view' | 'edit' | 'create' | 'delete' | 'manage';
|
|
2762
|
+
dashboard?: DashboardPage;
|
|
2763
|
+
id?: string | number;
|
|
2764
|
+
}
|
|
2765
|
+
declare class DashboardList implements OnDestroy {
|
|
2766
|
+
private dashboardService;
|
|
2767
|
+
private modalService;
|
|
2768
|
+
private transloco;
|
|
2769
|
+
private modalRef;
|
|
2770
|
+
readonly nameTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
2771
|
+
/** Whether to wrap content in mt-page component */
|
|
2772
|
+
readonly isPage: _angular_core.InputSignal<boolean>;
|
|
2773
|
+
/** Page title when isPage is true */
|
|
2774
|
+
readonly pageTitle: _angular_core.InputSignal<string>;
|
|
2775
|
+
/** Base route for navigation (default: current route) */
|
|
2776
|
+
readonly baseRoute: _angular_core.InputSignal<string>;
|
|
2777
|
+
/** Whether to show the create button */
|
|
2778
|
+
readonly showCreateButton: _angular_core.InputSignal<boolean>;
|
|
2779
|
+
/** Whether to show the view action */
|
|
2780
|
+
readonly showViewButton: _angular_core.InputSignal<boolean>;
|
|
2781
|
+
/** Whether to show the edit action */
|
|
2782
|
+
readonly showEditButton: _angular_core.InputSignal<boolean>;
|
|
2783
|
+
/** Emitted when a dashboard action is triggered */
|
|
2784
|
+
readonly dashboardAction: _angular_core.OutputEmitterRef<DashboardListEvent>;
|
|
2785
|
+
/** Emitted when a new dashboard is created */
|
|
2786
|
+
readonly dashboardCreated: _angular_core.OutputEmitterRef<_masterteam_dashboard_builder.Report>;
|
|
2787
|
+
/** Dashboards resource using rxResource */
|
|
2788
|
+
readonly dashboards: _angular_core.ResourceRef<_masterteam_dashboard_builder.ApiResponse<_masterteam_dashboard_builder.Report[]> | undefined>;
|
|
2789
|
+
/** Current language code */
|
|
2790
|
+
readonly langCode: _angular_core.Signal<string>;
|
|
2791
|
+
/** Loading state */
|
|
2792
|
+
readonly isLoading: _angular_core.Signal<boolean>;
|
|
2793
|
+
/** Dashboard list */
|
|
2794
|
+
readonly dashboardList: _angular_core.Signal<_masterteam_dashboard_builder.Report[]>;
|
|
2795
|
+
/** Table columns */
|
|
2796
|
+
readonly tableColumns: _angular_core.Signal<ColumnDef[]>;
|
|
2797
|
+
/** Table row actions */
|
|
2798
|
+
readonly rowActions: _angular_core.Signal<TableAction[]>;
|
|
2799
|
+
/** Deleting row IDs for loading state */
|
|
2800
|
+
readonly deletingRowIds: _angular_core.WritableSignal<(string | number)[]>;
|
|
2801
|
+
ngOnDestroy(): void;
|
|
2802
|
+
/**
|
|
2803
|
+
* Get localized dashboard name
|
|
2804
|
+
*/
|
|
2805
|
+
getDashboardName(dashboard: DashboardPage): string;
|
|
2806
|
+
/**
|
|
2807
|
+
* Handle view action - emits event only
|
|
2808
|
+
*/
|
|
2809
|
+
onView(dashboard: DashboardPage): void;
|
|
2810
|
+
/**
|
|
2811
|
+
* Handle edit action - opens dialog for editing
|
|
2812
|
+
*/
|
|
2813
|
+
onEdit(dashboard: DashboardPage): void;
|
|
2814
|
+
/**
|
|
2815
|
+
* Handle manage action - emits event for navigation
|
|
2816
|
+
*/
|
|
2817
|
+
onManage(dashboard: DashboardPage): void;
|
|
2818
|
+
/**
|
|
2819
|
+
* Open create dashboard modal
|
|
2820
|
+
*/
|
|
2821
|
+
openCreateModal(): void;
|
|
2822
|
+
/**
|
|
2823
|
+
* Refresh the dashboard list
|
|
2824
|
+
*/
|
|
2825
|
+
refresh(): void;
|
|
2826
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardList, never>;
|
|
2827
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardList, "mt-dashboard-list", never, { "isPage": { "alias": "isPage"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "baseRoute": { "alias": "baseRoute"; "required": false; "isSignal": true; }; "showCreateButton": { "alias": "showCreateButton"; "required": false; "isSignal": true; }; "showViewButton": { "alias": "showViewButton"; "required": false; "isSignal": true; }; "showEditButton": { "alias": "showEditButton"; "required": false; "isSignal": true; }; }, { "dashboardAction": "dashboardAction"; "dashboardCreated": "dashboardCreated"; }, never, never, true, never>;
|
|
2828
|
+
}
|
|
2829
|
+
|
|
2830
|
+
interface ApiResponse<T> {
|
|
2831
|
+
data: T;
|
|
2832
|
+
status?: number;
|
|
2833
|
+
message?: string;
|
|
2834
|
+
}
|
|
2835
|
+
/**
|
|
2836
|
+
* Dashboard Builder Service
|
|
2837
|
+
*
|
|
2838
|
+
* Handles all API calls for dashboard management including:
|
|
2839
|
+
* - Reports CRUD (Dashboard/Excel)
|
|
2840
|
+
* - Chart linking/unlinking
|
|
2841
|
+
* - Metadata from gateway (modules, properties, values)
|
|
2842
|
+
*/
|
|
2843
|
+
declare class DashboardBuilderService {
|
|
2844
|
+
private http;
|
|
2845
|
+
/** Subject for processing items */
|
|
2846
|
+
private processOnItem;
|
|
2847
|
+
readonly processOnItem$: Observable<{
|
|
2848
|
+
actionType: string;
|
|
2849
|
+
value: any;
|
|
2850
|
+
}>;
|
|
2851
|
+
/** Filters signal for reactive state */
|
|
2852
|
+
readonly filters: _angular_core.WritableSignal<any[]>;
|
|
2853
|
+
/** Chart for selected dialog */
|
|
2854
|
+
readonly chartForSelectedDialog: _angular_core.WritableSignal<any>;
|
|
2855
|
+
/**
|
|
2856
|
+
* Selector to Name mapping (e.g., "Level:7" -> "Project")
|
|
2857
|
+
* Built from tree data, used to resolve selectorName for properties
|
|
2858
|
+
*/
|
|
2859
|
+
readonly selectorNameMap: _angular_core.WritableSignal<Map<string, string>>;
|
|
2860
|
+
/**
|
|
2861
|
+
* Tree data cache for building selector name map
|
|
2862
|
+
*/
|
|
2863
|
+
readonly treeData: _angular_core.WritableSignal<ServiceItem[]>;
|
|
2864
|
+
/**
|
|
2865
|
+
* Fixed selections that cannot be removed or edited in SelectionConfiguration.
|
|
2866
|
+
* These selections are always shown and are read-only.
|
|
2867
|
+
*/
|
|
2868
|
+
readonly fixedSelections: _angular_core.WritableSignal<ISelection[]>;
|
|
2869
|
+
/** API configuration */
|
|
2870
|
+
private urlPrefix;
|
|
2871
|
+
/** HTTP context for gateway requests */
|
|
2872
|
+
private gatewayContext;
|
|
2873
|
+
constructor();
|
|
2874
|
+
private loadConfig;
|
|
2875
|
+
/**
|
|
2876
|
+
* Emit process action
|
|
2877
|
+
*/
|
|
2878
|
+
doProcessOnItem(actionType: string, value: any): void;
|
|
2879
|
+
/**
|
|
2880
|
+
* Build selector name map from tree data
|
|
2881
|
+
* Maps selector (e.g., "Level:7") to name (e.g., "Project")
|
|
2882
|
+
* @param services Tree data services array
|
|
2883
|
+
*/
|
|
2884
|
+
buildSelectorNameMap(services: ServiceItem[]): void;
|
|
2885
|
+
/**
|
|
2886
|
+
* Set fixed selections that cannot be removed or edited
|
|
2887
|
+
* @param selections Array of ISelection to be fixed/locked
|
|
2888
|
+
*/
|
|
2889
|
+
setFixedSelections(selections: ISelection[]): void;
|
|
2890
|
+
/**
|
|
2891
|
+
* Clear all fixed selections
|
|
2892
|
+
*/
|
|
2893
|
+
clearFixedSelections(): void;
|
|
2894
|
+
/**
|
|
2895
|
+
* Add a single fixed selection
|
|
2896
|
+
* @param selection Selection to add as fixed
|
|
2897
|
+
*/
|
|
2898
|
+
addFixedSelection(selection: ISelection): void;
|
|
2899
|
+
/**
|
|
2900
|
+
* Remove a single fixed selection by ID
|
|
2901
|
+
* @param selectionId ID of the selection to remove
|
|
2902
|
+
*/
|
|
2903
|
+
removeFixedSelection(selectionId: number): void;
|
|
2904
|
+
/**
|
|
2905
|
+
* Resolve selector name from selector
|
|
2906
|
+
* @param selector Full selector (e.g., "Level:7")
|
|
2907
|
+
* @returns Name (e.g., "Project") or null if not found
|
|
2908
|
+
*/
|
|
2909
|
+
resolveSelectorName(selector: string | null | undefined): string | null;
|
|
2910
|
+
/**
|
|
2911
|
+
* Enrich bulk properties response with selectorName from tree data
|
|
2912
|
+
* @param items Bulk properties response items
|
|
2913
|
+
* @returns Enriched items with selectorName
|
|
2914
|
+
*/
|
|
2915
|
+
enrichPropertiesWithSelectorName(items: BulkPropertiesResponseItem[]): BulkPropertiesResponseItem[];
|
|
2916
|
+
/**
|
|
2917
|
+
* Get all reports
|
|
2918
|
+
* @param type Optional filter by type: 'Dashboard' | 'Excel'
|
|
2919
|
+
*/
|
|
2920
|
+
getReports(type?: 'Dashboard' | 'Excel'): Observable<ApiResponse<Report[]>>;
|
|
2921
|
+
/**
|
|
2922
|
+
* Get report by ID
|
|
2923
|
+
*/
|
|
2924
|
+
getReportById(id: string | number): Observable<ApiResponse<Report>>;
|
|
2925
|
+
/**
|
|
2926
|
+
* Create a new report
|
|
2927
|
+
*/
|
|
2928
|
+
createReport(report: Partial<Report>): Observable<ApiResponse<Report>>;
|
|
2929
|
+
/**
|
|
2930
|
+
* Update an existing report
|
|
2931
|
+
*/
|
|
2932
|
+
updateReport(report: Partial<Report>, id: string | number): Observable<ApiResponse<Report>>;
|
|
2933
|
+
/**
|
|
2934
|
+
* Delete a report
|
|
2935
|
+
*/
|
|
2936
|
+
deleteReport(id: string | number): Observable<ApiResponse<void>>;
|
|
2937
|
+
/**
|
|
2938
|
+
* Link a chart to a report (creates or updates link)
|
|
2939
|
+
*/
|
|
2940
|
+
linkChart(request: LinkChartRequest): Observable<ApiResponse<void>>;
|
|
2941
|
+
/**
|
|
2942
|
+
* Bulk link charts to a report (creates or updates links)
|
|
2943
|
+
* @param requests Array of link requests
|
|
2944
|
+
* @returns Array of link responses with id and chartComponentId
|
|
2945
|
+
*/
|
|
2946
|
+
linkChartsBulk(requests: BulkLinkChartRequest[]): Observable<ApiResponse<BulkLinkChartResponse[]>>;
|
|
2947
|
+
/**
|
|
2948
|
+
* Update chart link configuration
|
|
2949
|
+
*/
|
|
2950
|
+
updateChartLink(request: LinkChartRequest): Observable<ApiResponse<void>>;
|
|
2951
|
+
/**
|
|
2952
|
+
* Unlink a chart from a report
|
|
2953
|
+
*/
|
|
2954
|
+
unlinkChart(request: UnlinkChartRequest): Observable<ApiResponse<void>>;
|
|
2955
|
+
/**
|
|
2956
|
+
* Get all available services from gateway
|
|
2957
|
+
*/
|
|
2958
|
+
getMetadataServices(): Observable<ApiResponse<any[]>>;
|
|
2959
|
+
/**
|
|
2960
|
+
* Get modules tree with all services, modules, and values in a single call
|
|
2961
|
+
* This returns the complete tree structure for efficient caching
|
|
2962
|
+
*/
|
|
2963
|
+
getModulesTree(): Observable<ApiResponse<ModulesTreeResponse>>;
|
|
2964
|
+
/**
|
|
2965
|
+
* Get modules for a specific service
|
|
2966
|
+
* @param serviceName The service name (e.g., 'pplus')
|
|
2967
|
+
*/
|
|
2968
|
+
getModules(serviceName: string): Observable<ApiResponse<ModuleType[]>>;
|
|
2969
|
+
/**
|
|
2970
|
+
* Get properties for a specific module
|
|
2971
|
+
* @param serviceName The service name (e.g., 'pplus')
|
|
2972
|
+
* @param moduleId Module type name or 'ModuleType:Id' format (e.g., 'Level:12')
|
|
2973
|
+
* @returns Properties array extracted from nested response
|
|
2974
|
+
*/
|
|
2975
|
+
getModuleProperties(serviceName: string, moduleId: string): Observable<ApiResponse<PropertyItem$1[]>>;
|
|
2976
|
+
/**
|
|
2977
|
+
* Get values for a specific module
|
|
2978
|
+
* @param serviceName The service name (e.g., 'pplus')
|
|
2979
|
+
* @param moduleId Module type name (e.g., 'Level')
|
|
2980
|
+
*/
|
|
2981
|
+
getModuleValues(serviceName: string, moduleId: string): Observable<ApiResponse<any[]>>;
|
|
2982
|
+
/**
|
|
2983
|
+
* Get authorization rules for a service
|
|
2984
|
+
* @param serviceName The service name
|
|
2985
|
+
*/
|
|
2986
|
+
getAuthorization(serviceName: string): Observable<ApiResponse<any>>;
|
|
2987
|
+
/**
|
|
2988
|
+
* Get public endpoints for a service
|
|
2989
|
+
* @param serviceName The service name
|
|
2990
|
+
*/
|
|
2991
|
+
getPublicEndpoints(serviceName: string): Observable<ApiResponse<any[]>>;
|
|
2992
|
+
/**
|
|
2993
|
+
* Get property items for lookup/status properties
|
|
2994
|
+
* GET /api/dashboards/builder/property-items/{propertyKey}?language=en
|
|
2995
|
+
*/
|
|
2996
|
+
getPropertyItems(propertyKey: string, language?: string): Observable<ApiResponse<PropertyItemsResponse>>;
|
|
2997
|
+
/**
|
|
2998
|
+
* Bulk properties lookup - single request for multiple modules
|
|
2999
|
+
* POST /metadata/modules/properties
|
|
3000
|
+
* @param items Array of { serviceName, moduleId } items
|
|
3001
|
+
* @returns Properties grouped by module (extracted from data.items)
|
|
3002
|
+
*/
|
|
3003
|
+
getBulkProperties(items: BulkPropertyRequestItem[]): Observable<ApiResponse<BulkPropertiesResponseItem[]>>;
|
|
3004
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardBuilderService, never>;
|
|
3005
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardBuilderService>;
|
|
3006
|
+
}
|
|
3007
|
+
|
|
3008
|
+
/**
|
|
3009
|
+
* Store Service
|
|
3010
|
+
*
|
|
3011
|
+
* Simple reactive store for dashboard builder state management
|
|
3012
|
+
*/
|
|
3013
|
+
declare class DashboardStoreService {
|
|
3014
|
+
/** Query parameters */
|
|
3015
|
+
private queryParamsSignal;
|
|
3016
|
+
readonly queryParams: _angular_core.Signal<Record<string, any>>;
|
|
3017
|
+
/** Stop actions on cards flag */
|
|
3018
|
+
private stopActionsSignal;
|
|
3019
|
+
readonly stopActions: _angular_core.Signal<boolean>;
|
|
3020
|
+
/** Dynamic key-value store */
|
|
3021
|
+
private dynamicStore;
|
|
3022
|
+
/** Language code */
|
|
3023
|
+
readonly languageCode: _angular_core.WritableSignal<string>;
|
|
3024
|
+
/** Direction */
|
|
3025
|
+
readonly direction: _angular_core.WritableSignal<"rtl" | "ltr">;
|
|
3026
|
+
/** Reload current page subject */
|
|
3027
|
+
private reloadCurrentPageSubject;
|
|
3028
|
+
readonly reloadCurrentPage$: rxjs.Observable<void>;
|
|
3029
|
+
/**
|
|
3030
|
+
* Trigger reload of current page
|
|
3031
|
+
*/
|
|
3032
|
+
triggerReloadCurrentPage(): void;
|
|
3033
|
+
/**
|
|
3034
|
+
* Update query parameters
|
|
3035
|
+
*/
|
|
3036
|
+
updateQueryParams(params: Record<string, any>): void;
|
|
3037
|
+
/**
|
|
3038
|
+
* Update stop actions flag
|
|
3039
|
+
*/
|
|
3040
|
+
updateStopActions(value: boolean): void;
|
|
3041
|
+
/**
|
|
3042
|
+
* Update dynamic key in store
|
|
3043
|
+
*/
|
|
3044
|
+
updateDynamicKey(key: string, value: any): void;
|
|
3045
|
+
/**
|
|
3046
|
+
* Get dynamic key from store
|
|
3047
|
+
*/
|
|
3048
|
+
getDynamicKey<T = any>(key: string): T | undefined;
|
|
3049
|
+
/**
|
|
3050
|
+
* Get computed value from dynamic store
|
|
3051
|
+
*/
|
|
3052
|
+
selectDynamicKey<T = any>(key: string): _angular_core.Signal<T | undefined>;
|
|
3053
|
+
/**
|
|
3054
|
+
* Get query params as a plain object
|
|
3055
|
+
*/
|
|
3056
|
+
getQueryParams(): Record<string, any>;
|
|
3057
|
+
/**
|
|
3058
|
+
* Get extra filters for a specific dashboard action
|
|
3059
|
+
*/
|
|
3060
|
+
getExtraFilterForCurrentAction(dashboardId: string): Record<string, any>;
|
|
3061
|
+
/**
|
|
3062
|
+
* Reset store to initial state
|
|
3063
|
+
*/
|
|
3064
|
+
reset(): void;
|
|
3065
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardStoreService, never>;
|
|
3066
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardStoreService>;
|
|
3067
|
+
}
|
|
3068
|
+
|
|
3069
|
+
/**
|
|
3070
|
+
* Manage Pages Component
|
|
3071
|
+
*
|
|
3072
|
+
* Dialog component for creating and editing dashboard reports
|
|
3073
|
+
*/
|
|
3074
|
+
declare class ManagePages implements OnInit {
|
|
3075
|
+
private dashboardService;
|
|
3076
|
+
readonly modal: ModalService;
|
|
3077
|
+
private ref;
|
|
3078
|
+
/** Input: Report to edit (if editing) */
|
|
3079
|
+
readonly dataEdit: _angular_core.InputSignal<Report | null>;
|
|
3080
|
+
/** Report form data */
|
|
3081
|
+
readonly report: _angular_core.WritableSignal<{
|
|
3082
|
+
id?: number;
|
|
3083
|
+
name: LocalizedName;
|
|
3084
|
+
type: "Dashboard" | "Excel";
|
|
3085
|
+
showInMenu: boolean;
|
|
3086
|
+
isActive: boolean;
|
|
3087
|
+
icon: string;
|
|
3088
|
+
url: string;
|
|
3089
|
+
dashboardConfig: ReportDashboardConfig;
|
|
3090
|
+
}>;
|
|
3091
|
+
/** Saving state */
|
|
3092
|
+
readonly saving: _angular_core.WritableSignal<boolean>;
|
|
3093
|
+
ngOnInit(): void;
|
|
3094
|
+
saveReport(): void;
|
|
3095
|
+
close(): void;
|
|
3096
|
+
private clear;
|
|
3097
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManagePages, never>;
|
|
3098
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManagePages, "mt-manage-pages", never, { "dataEdit": { "alias": "dataEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3099
|
+
}
|
|
3100
|
+
|
|
3101
|
+
/**
|
|
3102
|
+
* Manage Breadcrumb Component
|
|
3103
|
+
*
|
|
3104
|
+
* Dialog component for configuring breadcrumb navigation
|
|
3105
|
+
*/
|
|
3106
|
+
declare class ManageBreadcrumb implements OnInit {
|
|
3107
|
+
readonly modal: ModalService;
|
|
3108
|
+
private ref;
|
|
3109
|
+
/** Input: Initial breadcrumb data */
|
|
3110
|
+
readonly data: _angular_core.InputSignal<any[]>;
|
|
3111
|
+
/** Breadcrumb configuration */
|
|
3112
|
+
readonly breadcrumb: _angular_core.WritableSignal<any[]>;
|
|
3113
|
+
ngOnInit(): void;
|
|
3114
|
+
save(): void;
|
|
3115
|
+
close(): void;
|
|
3116
|
+
addItem(): void;
|
|
3117
|
+
removeItem(index: number): void;
|
|
3118
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageBreadcrumb, never>;
|
|
3119
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageBreadcrumb, "mt-manage-breadcrumb", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3120
|
+
}
|
|
3121
|
+
|
|
3122
|
+
/**
|
|
3123
|
+
* Filter Field Models
|
|
3124
|
+
*
|
|
3125
|
+
* Defines the structure for dynamic filter fields configuration
|
|
3126
|
+
* used in dashboard page filtering.
|
|
3127
|
+
*/
|
|
3128
|
+
/** Localized text with English and Arabic translations */
|
|
3129
|
+
interface LocalizedText {
|
|
3130
|
+
en: string;
|
|
3131
|
+
ar: string;
|
|
3132
|
+
}
|
|
3133
|
+
/** Filter field types supported by the system */
|
|
3134
|
+
type FilterFieldType = 'dropdownTVService' | 'lookup' | 'status' | 'phaseGate' | 'user' | 'date' | 'section' | 'separator' | 'year' | 'month' | 'quarter' | 'checkbox' | 'schemaSettings' | 'schemaSettingsLeafs';
|
|
3135
|
+
/** Selection item for dropdown configuration */
|
|
3136
|
+
interface FilterSelectionItem {
|
|
3137
|
+
id: number;
|
|
3138
|
+
moduleType?: string;
|
|
3139
|
+
moduleId?: number;
|
|
3140
|
+
filters?: any[];
|
|
3141
|
+
modules?: any[];
|
|
3142
|
+
properties?: any[];
|
|
3143
|
+
}
|
|
3144
|
+
/** Filter field configuration details */
|
|
3145
|
+
interface FilterFieldConfiguration {
|
|
3146
|
+
payload?: {
|
|
3147
|
+
dashboardId: number;
|
|
3148
|
+
selection: FilterSelectionItem[];
|
|
3149
|
+
chartType: string;
|
|
3150
|
+
query: {
|
|
3151
|
+
selectedProperties: string[];
|
|
3152
|
+
};
|
|
3153
|
+
};
|
|
3154
|
+
lookupId?: number;
|
|
3155
|
+
schemaLevelId?: number;
|
|
3156
|
+
logId?: number;
|
|
3157
|
+
isRequird?: boolean;
|
|
3158
|
+
isMultiple?: boolean;
|
|
3159
|
+
checked?: boolean;
|
|
3160
|
+
minYear?: number;
|
|
3161
|
+
maxYear?: number;
|
|
3162
|
+
}
|
|
3163
|
+
/** Filter field definition */
|
|
3164
|
+
interface FilterField {
|
|
3165
|
+
key?: string;
|
|
3166
|
+
name?: LocalizedText;
|
|
3167
|
+
type: FilterFieldType;
|
|
3168
|
+
configuration?: FilterFieldConfiguration;
|
|
3169
|
+
}
|
|
3170
|
+
/** Filter field type option for dropdown */
|
|
3171
|
+
interface FilterFieldTypeOption {
|
|
3172
|
+
value: FilterFieldType;
|
|
3173
|
+
label: string;
|
|
3174
|
+
products: string[];
|
|
3175
|
+
}
|
|
3176
|
+
|
|
3177
|
+
/**
|
|
3178
|
+
* Manage Filter On Page Component
|
|
3179
|
+
*
|
|
3180
|
+
* Dialog component for configuring page filters.
|
|
3181
|
+
* Opened from dashboard-builder via openManageFilter() method.
|
|
3182
|
+
*
|
|
3183
|
+
* Flow:
|
|
3184
|
+
* 1. Receives initial filters via `data` input
|
|
3185
|
+
* 2. User configures filters using DynamicFiltersConfig
|
|
3186
|
+
* 3. On save, closes with updated filters
|
|
3187
|
+
* 4. Dashboard-builder saves filters to pageConfig
|
|
3188
|
+
*/
|
|
3189
|
+
declare class ManageFilterOnPage implements OnInit {
|
|
3190
|
+
readonly modal: ModalService;
|
|
3191
|
+
private ref;
|
|
3192
|
+
/** Input: Initial filters data */
|
|
3193
|
+
readonly data: _angular_core.InputSignal<FilterField[]>;
|
|
3194
|
+
/** Input: Available lookups for dropdown */
|
|
3195
|
+
readonly lookups: _angular_core.InputSignal<any[]>;
|
|
3196
|
+
/** Input: Available level schemas */
|
|
3197
|
+
readonly levelsSchema: _angular_core.InputSignal<any[]>;
|
|
3198
|
+
/** Filters configuration */
|
|
3199
|
+
readonly filtersConfig: _angular_core.WritableSignal<FilterField[]>;
|
|
3200
|
+
/** Level logs for status filter */
|
|
3201
|
+
readonly levelLogs: _angular_core.WritableSignal<any[]>;
|
|
3202
|
+
ngOnInit(): void;
|
|
3203
|
+
/** Handle filter configuration changes */
|
|
3204
|
+
onFiltersChange(filters: FilterField[]): void;
|
|
3205
|
+
/** Load level logs for a specific schema level (placeholder for API call) */
|
|
3206
|
+
onLoadLevelLogs(schemaLevelId: number): void;
|
|
3207
|
+
/** Save and close the dialog */
|
|
3208
|
+
save(): void;
|
|
3209
|
+
/** Cancel and close the dialog */
|
|
3210
|
+
close(): void;
|
|
3211
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageFilterOnPage, never>;
|
|
3212
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageFilterOnPage, "mt-manage-filter-on-page", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "lookups": { "alias": "lookups"; "required": false; "isSignal": true; }; "levelsSchema": { "alias": "levelsSchema"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3213
|
+
}
|
|
3214
|
+
|
|
3215
|
+
declare class DynamicFiltersConfig implements ControlValueAccessor {
|
|
3216
|
+
/** Available lookups from parent context */
|
|
3217
|
+
readonly lookups: _angular_core.InputSignal<any[]>;
|
|
3218
|
+
/** Available level schemas from parent context */
|
|
3219
|
+
readonly levelsSchema: _angular_core.InputSignal<any[]>;
|
|
3220
|
+
/** Available level logs from parent context */
|
|
3221
|
+
readonly levelLogs: _angular_core.InputSignal<any[]>;
|
|
3222
|
+
/** Product type to filter available field types */
|
|
3223
|
+
readonly productType: _angular_core.InputSignal<string>;
|
|
3224
|
+
/** Emit when level logs need to be loaded for a specific schema level */
|
|
3225
|
+
readonly loadLevelLogs: _angular_core.OutputEmitterRef<number>;
|
|
3226
|
+
/** Filter fields data */
|
|
3227
|
+
readonly filterFields: _angular_core.WritableSignal<FilterField[]>;
|
|
3228
|
+
/** Paste configuration state */
|
|
3229
|
+
readonly showPasteArea: _angular_core.WritableSignal<boolean>;
|
|
3230
|
+
readonly pasteContent: _angular_core.WritableSignal<string>;
|
|
3231
|
+
readonly pasteError: _angular_core.WritableSignal<string>;
|
|
3232
|
+
/** Disabled state */
|
|
3233
|
+
readonly disabled: _angular_core.WritableSignal<boolean>;
|
|
3234
|
+
/** Available field types filtered by product */
|
|
3235
|
+
readonly availableFieldTypes: _angular_core.Signal<FilterFieldTypeOption[]>;
|
|
3236
|
+
private onChange;
|
|
3237
|
+
private onTouched;
|
|
3238
|
+
writeValue(value: FilterField[]): void;
|
|
3239
|
+
registerOnChange(fn: (value: FilterField[]) => void): void;
|
|
3240
|
+
registerOnTouched(fn: () => void): void;
|
|
3241
|
+
setDisabledState(isDisabled: boolean): void;
|
|
3242
|
+
/** Add a new filter field */
|
|
3243
|
+
addFilterField(): void;
|
|
3244
|
+
/** Remove a filter field by index */
|
|
3245
|
+
removeFilterField(index: number): void;
|
|
3246
|
+
/** Update a filter field property */
|
|
3247
|
+
updateField(index: number, key: keyof FilterField, value: any): void;
|
|
3248
|
+
/** Update filter field name */
|
|
3249
|
+
updateFieldName(index: number, lang: 'en' | 'ar', value: string): void;
|
|
3250
|
+
/** Update filter field configuration */
|
|
3251
|
+
updateFieldConfig(index: number, key: string, value: any): void;
|
|
3252
|
+
/** Handle field type change */
|
|
3253
|
+
onFieldTypeChange(index: number, type: FilterFieldType): void;
|
|
3254
|
+
/** Handle schema level change for status/phaseGate */
|
|
3255
|
+
onSchemaLevelChange(index: number, schemaLevelId: number): void;
|
|
3256
|
+
/** Copy current configuration to clipboard */
|
|
3257
|
+
copyConfiguration(): void;
|
|
3258
|
+
/** Toggle paste area visibility */
|
|
3259
|
+
togglePasteArea(): void;
|
|
3260
|
+
/** Apply pasted configuration */
|
|
3261
|
+
applyPastedConfiguration(): void;
|
|
3262
|
+
/** Track by function for ngFor */
|
|
3263
|
+
trackByIndex(index: number): number;
|
|
3264
|
+
/** Notify parent of changes */
|
|
3265
|
+
private notifyChange;
|
|
3266
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicFiltersConfig, never>;
|
|
3267
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicFiltersConfig, "mt-dynamic-filters-config", never, { "lookups": { "alias": "lookups"; "required": false; "isSignal": true; }; "levelsSchema": { "alias": "levelsSchema"; "required": false; "isSignal": true; }; "levelLogs": { "alias": "levelLogs"; "required": false; "isSignal": true; }; "productType": { "alias": "productType"; "required": false; "isSignal": true; }; }, { "loadLevelLogs": "loadLevelLogs"; }, never, never, true, never>;
|
|
3268
|
+
}
|
|
3269
|
+
|
|
3270
|
+
declare class ChartSettingsDrawer {
|
|
3271
|
+
private dialogRef;
|
|
3272
|
+
private drawerConfig;
|
|
3273
|
+
readonly modal: ModalService;
|
|
3274
|
+
/** The chart item signal - reactive for proper change detection */
|
|
3275
|
+
readonly item: _angular_core.WritableSignal<DashboardChartItem | null>;
|
|
3276
|
+
constructor();
|
|
3277
|
+
/** Determine the type of manage UI to show */
|
|
3278
|
+
readonly manageType: _angular_core.Signal<QuickManageType>;
|
|
3279
|
+
/** Default config (full config for DefaultControlUi) */
|
|
3280
|
+
readonly defaultConfig: _angular_core.Signal<{}>;
|
|
3281
|
+
/** Pie chart config - note: typo "Overried" matches old implementation */
|
|
3282
|
+
readonly pieConfig: _angular_core.Signal<any>;
|
|
3283
|
+
/** Bar chart config */
|
|
3284
|
+
readonly barConfig: _angular_core.Signal<any>;
|
|
3285
|
+
/** Stack bar chart config */
|
|
3286
|
+
readonly stackBarConfig: _angular_core.Signal<any>;
|
|
3287
|
+
/** Snapshot bar chart config */
|
|
3288
|
+
readonly snapshotBarConfig: _angular_core.Signal<any>;
|
|
3289
|
+
/** Update default config */
|
|
3290
|
+
onDefaultConfigChange(config: any): void;
|
|
3291
|
+
/** Update pie chart config - note: typo "Overried" matches old implementation */
|
|
3292
|
+
onPieConfigChange(config: any): void;
|
|
3293
|
+
/** Update bar chart config */
|
|
3294
|
+
onBarConfigChange(config: any): void;
|
|
3295
|
+
/** Update stack bar chart config */
|
|
3296
|
+
onStackBarConfigChange(config: any): void;
|
|
3297
|
+
/** Update snapshot bar chart config */
|
|
3298
|
+
onSnapshotBarConfigChange(config: any): void;
|
|
3299
|
+
/** Apply changes and close drawer */
|
|
3300
|
+
apply(): void;
|
|
3301
|
+
/** Close without changes */
|
|
3302
|
+
close(): void;
|
|
3303
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartSettingsDrawer, never>;
|
|
3304
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartSettingsDrawer, "mt-chart-settings-drawer", never, {}, {}, never, never, true, never>;
|
|
3305
|
+
}
|
|
3306
|
+
|
|
3307
|
+
interface DefaultControlConfig {
|
|
3308
|
+
title: string;
|
|
3309
|
+
titleFontSize: number;
|
|
3310
|
+
titleColor: string;
|
|
3311
|
+
showSubtitle: boolean;
|
|
3312
|
+
subtitle: string;
|
|
3313
|
+
subtitleFontSize: number;
|
|
3314
|
+
subtitleColor: string;
|
|
3315
|
+
backgroundColor: string;
|
|
3316
|
+
borderColor: string;
|
|
3317
|
+
borderRadius: number;
|
|
3318
|
+
padding: number;
|
|
3319
|
+
}
|
|
3320
|
+
declare class DefaultControlUi implements ControlValueAccessor {
|
|
3321
|
+
readonly config: _angular_core.WritableSignal<DefaultControlConfig>;
|
|
3322
|
+
readonly fontSizeOptions: {
|
|
3323
|
+
label: string;
|
|
3324
|
+
value: number;
|
|
3325
|
+
}[];
|
|
3326
|
+
private onChange;
|
|
3327
|
+
private onTouched;
|
|
3328
|
+
writeValue(value: DefaultControlConfig): void;
|
|
3329
|
+
registerOnChange(fn: (value: DefaultControlConfig) => void): void;
|
|
3330
|
+
registerOnTouched(fn: () => void): void;
|
|
3331
|
+
updateConfig(partial: Partial<DefaultControlConfig>): void;
|
|
3332
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DefaultControlUi, never>;
|
|
3333
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DefaultControlUi, "mt-default-control-ui", never, {}, {}, never, never, true, never>;
|
|
3334
|
+
}
|
|
3335
|
+
|
|
3336
|
+
/**
|
|
3337
|
+
* Pie Chart Configuration - Matches old implementation exactly
|
|
3338
|
+
*/
|
|
3339
|
+
interface PieControlConfig {
|
|
3340
|
+
radius?: number;
|
|
3341
|
+
thickness?: number;
|
|
3342
|
+
padAngle?: number;
|
|
3343
|
+
borderRadius?: number;
|
|
3344
|
+
centerX?: number;
|
|
3345
|
+
centerY?: number;
|
|
3346
|
+
startAngle?: number;
|
|
3347
|
+
endAngle?: number;
|
|
3348
|
+
roseType?: boolean | 'radius' | 'area';
|
|
3349
|
+
useEnhancedLegend?: boolean;
|
|
3350
|
+
legendPosition?: 'left' | 'right' | 'top' | 'bottom';
|
|
3351
|
+
legendVerticalAlign?: 'top' | 'middle' | 'bottom';
|
|
3352
|
+
legendOrientation?: 'horizontal' | 'vertical';
|
|
3353
|
+
legendType?: 'scroll' | 'plain';
|
|
3354
|
+
legendFontSize?: number;
|
|
3355
|
+
legendFontColor?: string;
|
|
3356
|
+
legendIcon?: string;
|
|
3357
|
+
labelFontSize?: number;
|
|
3358
|
+
totalValueFontSize?: number;
|
|
3359
|
+
labelFontColor?: string;
|
|
3360
|
+
labelFormatter?: string;
|
|
3361
|
+
tooltipTrigger?: 'item' | 'axis' | 'none';
|
|
3362
|
+
labelPosition?: string;
|
|
3363
|
+
showLabelLine?: boolean;
|
|
3364
|
+
explode?: number;
|
|
3365
|
+
animation?: boolean;
|
|
3366
|
+
animationDuration?: number;
|
|
3367
|
+
tooltipBackgroundColor?: string;
|
|
3368
|
+
tooltipBorderColor?: string;
|
|
3369
|
+
tooltipBorderWidth?: number;
|
|
3370
|
+
}
|
|
3371
|
+
declare class PieControlUi implements ControlValueAccessor {
|
|
3372
|
+
readonly config: _angular_core.WritableSignal<PieControlConfig>;
|
|
3373
|
+
readonly roseTypeOptions: ({
|
|
3374
|
+
label: string;
|
|
3375
|
+
value: boolean;
|
|
3376
|
+
} | {
|
|
3377
|
+
label: string;
|
|
3378
|
+
value: string;
|
|
3379
|
+
})[];
|
|
3380
|
+
readonly labelPositionOptions: {
|
|
3381
|
+
label: string;
|
|
3382
|
+
value: string;
|
|
3383
|
+
}[];
|
|
3384
|
+
readonly legendPositionOptions: {
|
|
3385
|
+
label: string;
|
|
3386
|
+
value: string;
|
|
3387
|
+
}[];
|
|
3388
|
+
readonly legendVerticalAlignOptions: {
|
|
3389
|
+
label: string;
|
|
3390
|
+
value: string;
|
|
3391
|
+
}[];
|
|
3392
|
+
readonly legendOrientationOptions: {
|
|
3393
|
+
label: string;
|
|
3394
|
+
value: string;
|
|
3395
|
+
}[];
|
|
3396
|
+
readonly legendTypeOptions: {
|
|
3397
|
+
label: string;
|
|
3398
|
+
value: string;
|
|
3399
|
+
}[];
|
|
3400
|
+
readonly legendIconOptions: {
|
|
3401
|
+
label: string;
|
|
3402
|
+
value: string;
|
|
3403
|
+
}[];
|
|
3404
|
+
readonly labelFormatterOptions: {
|
|
3405
|
+
label: string;
|
|
3406
|
+
value: string;
|
|
3407
|
+
}[];
|
|
3408
|
+
readonly tooltipTriggerOptions: {
|
|
3409
|
+
label: string;
|
|
3410
|
+
value: string;
|
|
3411
|
+
}[];
|
|
3412
|
+
readonly fontSizeOptions: {
|
|
3413
|
+
label: string;
|
|
3414
|
+
value: number;
|
|
3415
|
+
}[];
|
|
3416
|
+
private onChange;
|
|
3417
|
+
private onTouched;
|
|
3418
|
+
writeValue(value: PieControlConfig): void;
|
|
3419
|
+
registerOnChange(fn: (value: PieControlConfig) => void): void;
|
|
3420
|
+
registerOnTouched(fn: () => void): void;
|
|
3421
|
+
updateConfig(partial: Partial<PieControlConfig>): void;
|
|
3422
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieControlUi, never>;
|
|
3423
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieControlUi, "mt-pie-control-ui", never, {}, {}, never, never, true, never>;
|
|
3424
|
+
}
|
|
3425
|
+
|
|
3426
|
+
interface BarControlConfig {
|
|
3427
|
+
barWidth?: number;
|
|
3428
|
+
barGap?: number;
|
|
3429
|
+
barCategoryGap?: number;
|
|
3430
|
+
barType?: 'bar' | 'line';
|
|
3431
|
+
xAxisShow?: boolean;
|
|
3432
|
+
yAxisShow?: boolean;
|
|
3433
|
+
yAxisFormat?: string;
|
|
3434
|
+
showCurrency?: boolean;
|
|
3435
|
+
xAxisFontSize?: number;
|
|
3436
|
+
yAxisFontSize?: number;
|
|
3437
|
+
xAxisFontColor?: string;
|
|
3438
|
+
yAxisFontColor?: string;
|
|
3439
|
+
xAxisLineColor?: string;
|
|
3440
|
+
yAxisLineColor?: string;
|
|
3441
|
+
gridTop?: number;
|
|
3442
|
+
gridBottom?: number;
|
|
3443
|
+
gridLeft?: number;
|
|
3444
|
+
gridRight?: number;
|
|
3445
|
+
labelShow?: boolean;
|
|
3446
|
+
labelPosition?: 'top' | 'left' | 'right' | 'bottom' | 'inside';
|
|
3447
|
+
labelFontSize?: number;
|
|
3448
|
+
labelFontColor?: string;
|
|
3449
|
+
labelFormatter?: string;
|
|
3450
|
+
tooltipShow?: boolean;
|
|
3451
|
+
tooltipTrigger?: 'item' | 'axis' | 'none';
|
|
3452
|
+
tooltipBackgroundColor?: string;
|
|
3453
|
+
tooltipBorderColor?: string;
|
|
3454
|
+
tooltipBorderWidth?: number;
|
|
3455
|
+
borderRadius?: boolean;
|
|
3456
|
+
showValueOnlyInTooltip?: boolean;
|
|
3457
|
+
maxCharsPerLine?: number;
|
|
3458
|
+
isGrouped?: boolean;
|
|
3459
|
+
}
|
|
3460
|
+
declare class BarControlUi implements ControlValueAccessor {
|
|
3461
|
+
readonly config: _angular_core.WritableSignal<BarControlConfig>;
|
|
3462
|
+
readonly barTypeOptions: {
|
|
3463
|
+
label: string;
|
|
3464
|
+
value: string;
|
|
3465
|
+
}[];
|
|
3466
|
+
readonly yAxisFormatOptions: {
|
|
3467
|
+
label: string;
|
|
3468
|
+
value: string;
|
|
3469
|
+
}[];
|
|
3470
|
+
readonly labelPositionOptions: {
|
|
3471
|
+
label: string;
|
|
3472
|
+
value: string;
|
|
3473
|
+
}[];
|
|
3474
|
+
readonly tooltipTriggerOptions: {
|
|
3475
|
+
label: string;
|
|
3476
|
+
value: string;
|
|
3477
|
+
}[];
|
|
3478
|
+
readonly labelFormatterOptions: {
|
|
3479
|
+
label: string;
|
|
3480
|
+
value: string;
|
|
3481
|
+
}[];
|
|
3482
|
+
readonly fontSizeOptions: {
|
|
3483
|
+
label: string;
|
|
3484
|
+
value: number;
|
|
3485
|
+
}[];
|
|
3486
|
+
private onChange;
|
|
3487
|
+
private onTouched;
|
|
3488
|
+
writeValue(value: BarControlConfig): void;
|
|
3489
|
+
registerOnChange(fn: (value: BarControlConfig) => void): void;
|
|
3490
|
+
registerOnTouched(fn: () => void): void;
|
|
3491
|
+
updateConfig(partial: Partial<BarControlConfig>): void;
|
|
3492
|
+
onYAxisFormatChange(value: string): void;
|
|
3493
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarControlUi, never>;
|
|
3494
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarControlUi, "mt-bar-control-ui", never, {}, {}, never, never, true, never>;
|
|
3495
|
+
}
|
|
3496
|
+
|
|
3497
|
+
interface StackBarControlConfig {
|
|
3498
|
+
barWidth?: number;
|
|
3499
|
+
hasLines?: boolean;
|
|
3500
|
+
barType?: 'bar' | 'line';
|
|
3501
|
+
xAxisLabelRotate?: number;
|
|
3502
|
+
xAxisFontSize?: number;
|
|
3503
|
+
yAxisShow?: boolean;
|
|
3504
|
+
yAxisFormat?: {
|
|
3505
|
+
type: string;
|
|
3506
|
+
[key: string]: any;
|
|
3507
|
+
};
|
|
3508
|
+
legendPositionY?: 'top' | 'bottom';
|
|
3509
|
+
legendPositionX?: 'start' | 'center' | 'end';
|
|
3510
|
+
legendFontSize?: number;
|
|
3511
|
+
legendFontColor?: string;
|
|
3512
|
+
showLabel?: boolean;
|
|
3513
|
+
labelFontSize?: number;
|
|
3514
|
+
labelFontColor?: string;
|
|
3515
|
+
tooltipBackgroundColor?: string;
|
|
3516
|
+
tooltipBorderColor?: string;
|
|
3517
|
+
tooltipBorderWidth?: number;
|
|
3518
|
+
gridLeft?: string | number;
|
|
3519
|
+
gridRight?: string | number;
|
|
3520
|
+
gridTop?: string | number;
|
|
3521
|
+
gridBottom?: string | number;
|
|
3522
|
+
isStacked?: boolean;
|
|
3523
|
+
borderRadius?: string | number;
|
|
3524
|
+
}
|
|
3525
|
+
declare class StackBarControlUi implements ControlValueAccessor {
|
|
3526
|
+
readonly config: _angular_core.WritableSignal<StackBarControlConfig>;
|
|
3527
|
+
readonly legendPositionYOptions: {
|
|
3528
|
+
label: string;
|
|
3529
|
+
value: string;
|
|
3530
|
+
}[];
|
|
3531
|
+
readonly legendPositionXOptions: {
|
|
3532
|
+
label: string;
|
|
3533
|
+
value: string;
|
|
3534
|
+
}[];
|
|
3535
|
+
readonly barTypeOptions: {
|
|
3536
|
+
label: string;
|
|
3537
|
+
value: string;
|
|
3538
|
+
}[];
|
|
3539
|
+
readonly yAxisFormatOptions: ({
|
|
3540
|
+
label: string;
|
|
3541
|
+
value: null;
|
|
3542
|
+
} | {
|
|
3543
|
+
label: string;
|
|
3544
|
+
value: string;
|
|
3545
|
+
})[];
|
|
3546
|
+
readonly fontSizeOptions: {
|
|
3547
|
+
label: string;
|
|
3548
|
+
value: number;
|
|
3549
|
+
}[];
|
|
3550
|
+
private onChange;
|
|
3551
|
+
private onTouched;
|
|
3552
|
+
writeValue(value: StackBarControlConfig): void;
|
|
3553
|
+
registerOnChange(fn: (value: StackBarControlConfig) => void): void;
|
|
3554
|
+
registerOnTouched(fn: () => void): void;
|
|
3555
|
+
updateConfig(partial: Partial<StackBarControlConfig>): void;
|
|
3556
|
+
onYAxisFormatChange(formatType: string | null): void;
|
|
3557
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackBarControlUi, never>;
|
|
3558
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackBarControlUi, "mt-stack-bar-control-ui", never, {}, {}, never, never, true, never>;
|
|
3559
|
+
}
|
|
3560
|
+
|
|
3561
|
+
/**
|
|
3562
|
+
* Manage Item Component (Drawer)
|
|
3563
|
+
*
|
|
3564
|
+
* Main drawer component for configuring chart/widget items.
|
|
3565
|
+
* Uses tabs to organize different configuration sections.
|
|
3566
|
+
* Provides ManageItemService for state sharing between child components.
|
|
3567
|
+
*/
|
|
3568
|
+
declare class ManageItem implements OnInit {
|
|
3569
|
+
private _dashboardService;
|
|
3570
|
+
private _manageItemService;
|
|
3571
|
+
private _dialogConfig;
|
|
3572
|
+
readonly modal: ModalService;
|
|
3573
|
+
ref: ModalRef<any> | null;
|
|
3574
|
+
/** Input data from drawer - supports both input() and dialog data */
|
|
3575
|
+
readonly data: _angular_core.InputSignal<{
|
|
3576
|
+
chart?: DashboardChartItem;
|
|
3577
|
+
isDialog?: boolean;
|
|
3578
|
+
isNew?: boolean;
|
|
3579
|
+
chartType?: ChartTypeConfig;
|
|
3580
|
+
defaultSize?: {
|
|
3581
|
+
cols: number;
|
|
3582
|
+
rows: number;
|
|
3583
|
+
};
|
|
3584
|
+
} | null>;
|
|
3585
|
+
/** Whether chart type is pre-selected (hides type selection) */
|
|
3586
|
+
readonly hasPreselectedType: _angular_core.Signal<boolean>;
|
|
3587
|
+
/** Tab options with translation keys */
|
|
3588
|
+
readonly tabOptions: _angular_core.WritableSignal<{
|
|
3589
|
+
label: string;
|
|
3590
|
+
value: string;
|
|
3591
|
+
icon: string;
|
|
3592
|
+
}[]>;
|
|
3593
|
+
/** Active tab */
|
|
3594
|
+
readonly activeTab: _angular_core.WritableSignal<string>;
|
|
3595
|
+
/** Chart configuration being edited - from service */
|
|
3596
|
+
readonly config: _angular_core.Signal<ItemConfig | null>;
|
|
3597
|
+
/** Chart type ID - from service */
|
|
3598
|
+
readonly chartTypeId: _angular_core.Signal<string>;
|
|
3599
|
+
/** Selected chart type info */
|
|
3600
|
+
readonly selectedChartType: _angular_core.WritableSignal<ChartTypeConfig | null>;
|
|
3601
|
+
/** Is this a dialog item */
|
|
3602
|
+
readonly isDialog: _angular_core.Signal<any>;
|
|
3603
|
+
/** Is this a new item */
|
|
3604
|
+
readonly isNew: _angular_core.Signal<any>;
|
|
3605
|
+
/** Saving state */
|
|
3606
|
+
readonly saving: _angular_core.WritableSignal<boolean>;
|
|
3607
|
+
/** Validation state */
|
|
3608
|
+
readonly isValid: _angular_core.Signal<boolean>;
|
|
3609
|
+
/** Initialize from dialog data effect */
|
|
3610
|
+
private _initEffect;
|
|
3611
|
+
ngOnInit(): void;
|
|
3612
|
+
save(): void;
|
|
3613
|
+
cancel(): void;
|
|
3614
|
+
/** Update config from child components */
|
|
3615
|
+
onConfigUpdate(partialConfig: Partial<ItemConfig>): void;
|
|
3616
|
+
/** Update service config */
|
|
3617
|
+
onServiceConfigUpdate(partialConfig: Partial<ItemConfig['serviceConfig']>): void;
|
|
3618
|
+
/** Update client config */
|
|
3619
|
+
onClientConfigUpdate(partialConfig: Partial<ItemConfig['clientConfig']>): void;
|
|
3620
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageItem, never>;
|
|
3621
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageItem, "mt-manage-item", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3622
|
+
}
|
|
3623
|
+
|
|
3624
|
+
/**
|
|
3625
|
+
* General Settings Component
|
|
3626
|
+
*
|
|
3627
|
+
* Handles general chart configuration:
|
|
3628
|
+
* - Chart type selection (visual grid)
|
|
3629
|
+
* - Title (English & Arabic)
|
|
3630
|
+
* - Component name
|
|
3631
|
+
*/
|
|
3632
|
+
declare class GeneralSettings {
|
|
3633
|
+
private transloco;
|
|
3634
|
+
/** Current configuration */
|
|
3635
|
+
readonly config: _angular_core.InputSignal<ItemConfig | null>;
|
|
3636
|
+
/** Is dialog item (hides chart type selection) */
|
|
3637
|
+
readonly isDialog: _angular_core.InputSignal<boolean>;
|
|
3638
|
+
/** Whether chart type is pre-selected (hides chart type selection) */
|
|
3639
|
+
readonly hasPreselectedType: _angular_core.InputSignal<boolean>;
|
|
3640
|
+
/** Emit config changes */
|
|
3641
|
+
readonly configChange: _angular_core.OutputEmitterRef<Partial<ItemConfig>>;
|
|
3642
|
+
/** Emit chart type selection */
|
|
3643
|
+
readonly chartTypeChange: _angular_core.OutputEmitterRef<ChartTypeConfig>;
|
|
3644
|
+
/** All available chart types */
|
|
3645
|
+
readonly chartTypes: _angular_core.WritableSignal<ChartTypeConfig[]>;
|
|
3646
|
+
/** Chart types filtered (not hidden) */
|
|
3647
|
+
readonly chartTypesFiltered: _angular_core.Signal<ChartTypeConfig[]>;
|
|
3648
|
+
/** Grouped chart types by category */
|
|
3649
|
+
readonly chartTypesByCategory: _angular_core.Signal<{
|
|
3650
|
+
card: ChartTypeConfig[];
|
|
3651
|
+
chart: ChartTypeConfig[];
|
|
3652
|
+
table: ChartTypeConfig[];
|
|
3653
|
+
special: ChartTypeConfig[];
|
|
3654
|
+
layout: ChartTypeConfig[];
|
|
3655
|
+
}>;
|
|
3656
|
+
/** Currently selected chart type */
|
|
3657
|
+
readonly selectedChartType: _angular_core.Signal<ChartTypeConfig | null | undefined>;
|
|
3658
|
+
/**
|
|
3659
|
+
* Select a chart type
|
|
3660
|
+
*/
|
|
3661
|
+
selectChartType(type: ChartTypeConfig): void;
|
|
3662
|
+
/**
|
|
3663
|
+
* Check if a chart type is selected
|
|
3664
|
+
*/
|
|
3665
|
+
isTypeSelected(type: ChartTypeConfig): boolean;
|
|
3666
|
+
/**
|
|
3667
|
+
* Update title field
|
|
3668
|
+
*/
|
|
3669
|
+
updateTitle(lang: 'en' | 'ar', value: string): void;
|
|
3670
|
+
/**
|
|
3671
|
+
* Update component name
|
|
3672
|
+
*/
|
|
3673
|
+
updateComponentName(value: string): void;
|
|
3674
|
+
/**
|
|
3675
|
+
* Get category label
|
|
3676
|
+
*/
|
|
3677
|
+
getCategoryLabel(category: string): string;
|
|
3678
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GeneralSettings, never>;
|
|
3679
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GeneralSettings, "mt-general-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "isDialog": { "alias": "isDialog"; "required": false; "isSignal": true; }; "hasPreselectedType": { "alias": "hasPreselectedType"; "required": false; "isSignal": true; }; }, { "configChange": "configChange"; "chartTypeChange": "chartTypeChange"; }, never, never, true, never>;
|
|
3680
|
+
}
|
|
3681
|
+
|
|
3682
|
+
/**
|
|
3683
|
+
* Selection module info for linking - includes properties for each selection
|
|
3684
|
+
*/
|
|
3685
|
+
interface SelectionModule {
|
|
3686
|
+
selectionId: number;
|
|
3687
|
+
selector: string;
|
|
3688
|
+
moduleType: string;
|
|
3689
|
+
moduleTypeName: string;
|
|
3690
|
+
moduleName: string;
|
|
3691
|
+
properties: IProperty[];
|
|
3692
|
+
}
|
|
3693
|
+
|
|
3694
|
+
/**
|
|
3695
|
+
* Chart Query Series
|
|
3696
|
+
*/
|
|
3697
|
+
interface ChartQuerySeries {
|
|
3698
|
+
key: string;
|
|
3699
|
+
color: string;
|
|
3700
|
+
valueProperty: string | null;
|
|
3701
|
+
aggregateFunction: string;
|
|
3702
|
+
groupByProperties: string[];
|
|
3703
|
+
autoStack: boolean;
|
|
3704
|
+
stackProperties: string[];
|
|
3705
|
+
autoStackByProperty: string | null;
|
|
3706
|
+
filters: ChartQuerySeriesFilter[];
|
|
3707
|
+
extraProperties: string[];
|
|
3708
|
+
formula?: string;
|
|
3709
|
+
showAdvancedSettings?: boolean;
|
|
3710
|
+
barType?: 'bar' | 'line' | 'lineAccumulated';
|
|
3711
|
+
}
|
|
3712
|
+
/**
|
|
3713
|
+
* Chart Query Series Filter
|
|
3714
|
+
*/
|
|
3715
|
+
interface ChartQuerySeriesFilter {
|
|
3716
|
+
propertyKey: string | null;
|
|
3717
|
+
value: any;
|
|
3718
|
+
operator: string;
|
|
3719
|
+
}
|
|
3720
|
+
/**
|
|
3721
|
+
* Chart Query Configuration
|
|
3722
|
+
*/
|
|
3723
|
+
interface ChartQuery {
|
|
3724
|
+
categoryProperty: string;
|
|
3725
|
+
series: ChartQuerySeries[];
|
|
3726
|
+
}
|
|
3727
|
+
|
|
3728
|
+
/** Properties grouped by module for select with [group]="true" */
|
|
3729
|
+
interface PropertyGroup {
|
|
3730
|
+
label: string;
|
|
3731
|
+
items: IProperty[];
|
|
3732
|
+
}
|
|
3733
|
+
/**
|
|
3734
|
+
* Aggregation Property Configuration
|
|
3735
|
+
*/
|
|
3736
|
+
interface AggregationProperty {
|
|
3737
|
+
propertyKey: string | null;
|
|
3738
|
+
aggregateFunction: string;
|
|
3739
|
+
alias?: string;
|
|
3740
|
+
}
|
|
3741
|
+
/**
|
|
3742
|
+
* Table Query Configuration Value
|
|
3743
|
+
*/
|
|
3744
|
+
interface TableQueryValue {
|
|
3745
|
+
selectedProperties: string[];
|
|
3746
|
+
AggregationProperties: AggregationProperty[];
|
|
3747
|
+
lookupProperty: string;
|
|
3748
|
+
PivotProperties: string[];
|
|
3749
|
+
}
|
|
3750
|
+
/**
|
|
3751
|
+
* Table Query Component
|
|
3752
|
+
*
|
|
3753
|
+
* Handles query configuration for table/dialog chart types.
|
|
3754
|
+
* Implements ControlValueAccessor for form integration.
|
|
3755
|
+
*/
|
|
3756
|
+
declare class TableQuery implements ControlValueAccessor {
|
|
3757
|
+
private fb;
|
|
3758
|
+
/** Available properties (flat) */
|
|
3759
|
+
readonly propertiesFlat: _angular_core.InputSignal<IProperty[]>;
|
|
3760
|
+
/** Properties grouped by module for grouped select */
|
|
3761
|
+
readonly propertiesGrouped: _angular_core.InputSignal<PropertyGroup[]>;
|
|
3762
|
+
/** Whether to use grouped select (when multiple modules) */
|
|
3763
|
+
readonly useGroupedSelect: _angular_core.Signal<boolean>;
|
|
3764
|
+
/** Options config for multi-select */
|
|
3765
|
+
readonly optionsConfig: _angular_core.Signal<{
|
|
3766
|
+
optionValue: string;
|
|
3767
|
+
optionLabel: string;
|
|
3768
|
+
items: IProperty[];
|
|
3769
|
+
}>;
|
|
3770
|
+
/** Aggregate function options */
|
|
3771
|
+
readonly aggregateFunctions: {
|
|
3772
|
+
value: string;
|
|
3773
|
+
label: string;
|
|
3774
|
+
}[];
|
|
3775
|
+
/** Main form */
|
|
3776
|
+
readonly queryForm: FormGroup<{
|
|
3777
|
+
selectedProperties: _angular_forms.FormControl<string[] | null>;
|
|
3778
|
+
AggregationProperties: FormArray<FormGroup<any>>;
|
|
3779
|
+
lookupProperty: _angular_forms.FormControl<string | null>;
|
|
3780
|
+
PivotProperties: _angular_forms.FormControl<string[] | null>;
|
|
3781
|
+
}>;
|
|
3782
|
+
/** Disabled state */
|
|
3783
|
+
disabled: boolean;
|
|
3784
|
+
/** ControlValueAccessor callbacks */
|
|
3785
|
+
private onChange;
|
|
3786
|
+
private onTouched;
|
|
3787
|
+
constructor();
|
|
3788
|
+
writeValue(value: TableQueryValue): void;
|
|
3789
|
+
registerOnChange(fn: (value: TableQueryValue) => void): void;
|
|
3790
|
+
registerOnTouched(fn: () => void): void;
|
|
3791
|
+
setDisabledState(isDisabled: boolean): void;
|
|
3792
|
+
validate(): ValidationErrors | null;
|
|
3793
|
+
get aggregationArray(): FormArray;
|
|
3794
|
+
createAggregationFormGroup(agg?: Partial<AggregationProperty>): FormGroup;
|
|
3795
|
+
addAggregation(): void;
|
|
3796
|
+
removeAggregation(index: number): void;
|
|
3797
|
+
trackByIndex(index: number): number;
|
|
3798
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableQuery, never>;
|
|
3799
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableQuery, "mt-table-query", never, { "propertiesFlat": { "alias": "propertiesFlat"; "required": false; "isSignal": true; }; "propertiesGrouped": { "alias": "propertiesGrouped"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3800
|
+
}
|
|
3801
|
+
|
|
3802
|
+
/** Module properties response */
|
|
3803
|
+
interface ModuleProperties {
|
|
3804
|
+
/** Module type (e.g., "Level") */
|
|
3805
|
+
moduleName: string;
|
|
3806
|
+
/** Display name for the specific selector (e.g., "Projects" for "Level:7") */
|
|
3807
|
+
selectorName: string | null;
|
|
3808
|
+
/** Full selector (e.g., "Level:7") */
|
|
3809
|
+
selector: string;
|
|
3810
|
+
moduleId?: number;
|
|
3811
|
+
properties: IProperty[];
|
|
3812
|
+
}
|
|
3813
|
+
/**
|
|
3814
|
+
* Query component type based on chart type and component name
|
|
3815
|
+
*/
|
|
3816
|
+
type QueryComponentType = 'general' | 'table' | 'timeline' | 'timelineMultiLevel' | 'map' | 'splitter' | 'properties' | 'snapshot' | 'phaseGate' | 'repeater' | 'none';
|
|
3817
|
+
/**
|
|
3818
|
+
* Data Source Settings Component
|
|
3819
|
+
*
|
|
3820
|
+
* Comprehensive data source configuration:
|
|
3821
|
+
* - Module/Data source selection via SelectionConfiguration
|
|
3822
|
+
* - Source links for multiple selections via SourceLinkConfiguration
|
|
3823
|
+
* - Query configuration based on chart type (GeneralQuery, TableQuery, etc.)
|
|
3824
|
+
*/
|
|
3825
|
+
declare class DataSourceSettings {
|
|
3826
|
+
private dashboardService;
|
|
3827
|
+
/** Current configuration */
|
|
3828
|
+
readonly config: _angular_core.InputSignal<ItemConfig | null>;
|
|
3829
|
+
/** Selected chart type */
|
|
3830
|
+
readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
|
|
3831
|
+
/** Emit service config changes */
|
|
3832
|
+
readonly serviceConfigChange: _angular_core.OutputEmitterRef<Partial<ServiceConfig>>;
|
|
3833
|
+
/** Properties grouped by module */
|
|
3834
|
+
readonly modulesProperties: _angular_core.WritableSignal<ModuleProperties[]>;
|
|
3835
|
+
/** Flattened properties list with grouping info */
|
|
3836
|
+
readonly propertiesFlat: _angular_core.Signal<IPropertyWithGroup[]>;
|
|
3837
|
+
/**
|
|
3838
|
+
* Properties grouped for select field with [group]="true"
|
|
3839
|
+
* Structure: [{ label: 'Projects', items: [{ name, key }, ...] }, ...]
|
|
3840
|
+
* Uses selectorName for display (e.g., "Projects" instead of "Level")
|
|
3841
|
+
*/
|
|
3842
|
+
readonly propertiesGrouped: _angular_core.Signal<{
|
|
3843
|
+
label: string;
|
|
3844
|
+
items: IProperty[];
|
|
3845
|
+
}[]>;
|
|
3846
|
+
/**
|
|
3847
|
+
* Selection modules for source link configuration
|
|
3848
|
+
* Built from selections with their loaded module info
|
|
3849
|
+
*/
|
|
3850
|
+
readonly selectionModules: _angular_core.Signal<SelectionModule[]>;
|
|
3851
|
+
/** Query component type based on chart type and component name */
|
|
3852
|
+
readonly queryComponentType: _angular_core.Signal<QueryComponentType>;
|
|
3853
|
+
/** Loading states */
|
|
3854
|
+
readonly loadingProperties: _angular_core.WritableSignal<boolean>;
|
|
3855
|
+
/** Tab state: 'selection' or 'customApi' */
|
|
3856
|
+
readonly activeTab: _angular_core.WritableSignal<"selection" | "customApi">;
|
|
3857
|
+
/** Tab options for display */
|
|
3858
|
+
readonly tabOptions: {
|
|
3859
|
+
id: string;
|
|
3860
|
+
label: string;
|
|
3861
|
+
}[];
|
|
3862
|
+
/** Custom API configuration */
|
|
3863
|
+
readonly customApi: _angular_core.WritableSignal<CustomApi | null>;
|
|
3864
|
+
/** Internal selections state */
|
|
3865
|
+
readonly selections: _angular_core.WritableSignal<ISelection[]>;
|
|
3866
|
+
readonly sourceLinks: _angular_core.WritableSignal<SourceLink[]>;
|
|
3867
|
+
readonly query: _angular_core.WritableSignal<any>;
|
|
3868
|
+
readonly isNormalized: _angular_core.WritableSignal<boolean>;
|
|
3869
|
+
readonly groupByMultiple: _angular_core.WritableSignal<string[]>;
|
|
3870
|
+
/** Repeater dashboard selection */
|
|
3871
|
+
readonly repeaterDashboardId: _angular_core.WritableSignal<number | null>;
|
|
3872
|
+
readonly availableDashboards: _angular_core.WritableSignal<{
|
|
3873
|
+
id: number;
|
|
3874
|
+
name: string;
|
|
3875
|
+
}[]>;
|
|
3876
|
+
/** Show source links when multiple selections exist */
|
|
3877
|
+
readonly showSourceLinks: _angular_core.Signal<boolean>;
|
|
3878
|
+
/** Hide selection config for layout, snapshot, phaseGate types (they don't need data source selection) */
|
|
3879
|
+
readonly hideSelectionConfig: _angular_core.Signal<boolean>;
|
|
3880
|
+
/** Show groupByMultiple for table queries (non-report mode) */
|
|
3881
|
+
readonly showGroupByMultiple: _angular_core.Signal<boolean>;
|
|
3882
|
+
/**
|
|
3883
|
+
* Derived signal: Extract module keys from selections for change detection
|
|
3884
|
+
* Only changes when actual selectors change, not on every selection update
|
|
3885
|
+
*/
|
|
3886
|
+
private readonly moduleKeysSignature;
|
|
3887
|
+
/** Track last loaded module signature to prevent duplicate requests */
|
|
3888
|
+
private lastLoadedSignature;
|
|
3889
|
+
constructor();
|
|
3890
|
+
/**
|
|
3891
|
+
* Load properties for all selections using bulk API
|
|
3892
|
+
* Single POST request to /metadata/modules/properties
|
|
3893
|
+
* Enriches response with selectorName from tree data
|
|
3894
|
+
*/
|
|
3895
|
+
loadPropertiesForSelections(selections: ISelection[]): void;
|
|
3896
|
+
/**
|
|
3897
|
+
* Handle selection changes
|
|
3898
|
+
*/
|
|
3899
|
+
onSelectionsChange(selections: ISelection[]): void;
|
|
3900
|
+
/**
|
|
3901
|
+
* Handle module change - update selections, effect handles property loading
|
|
3902
|
+
*/
|
|
3903
|
+
onModuleChange(event: {
|
|
3904
|
+
selectionId: number;
|
|
3905
|
+
selector: string;
|
|
3906
|
+
selectorName?: string | null;
|
|
3907
|
+
}): void;
|
|
3908
|
+
/**
|
|
3909
|
+
* Extract module type from selector (e.g., "Level:7" -> "Level")
|
|
3910
|
+
*/
|
|
3911
|
+
private extractModuleTypeFromSelector;
|
|
3912
|
+
/**
|
|
3913
|
+
* Handle source links change
|
|
3914
|
+
*/
|
|
3915
|
+
onSourceLinksChange(links: SourceLink[]): void;
|
|
3916
|
+
/**
|
|
3917
|
+
* Handle query change (general query)
|
|
3918
|
+
*/
|
|
3919
|
+
onQueryChange(query: ChartQuery): void;
|
|
3920
|
+
/**
|
|
3921
|
+
* Handle table query change
|
|
3922
|
+
*/
|
|
3923
|
+
onTableQueryChange(query: TableQuery): void;
|
|
3924
|
+
/**
|
|
3925
|
+
* Handle timeline query change
|
|
3926
|
+
*/
|
|
3927
|
+
onTimelineQueryChange(query: any): void;
|
|
3928
|
+
/**
|
|
3929
|
+
* Handle map query change
|
|
3930
|
+
*/
|
|
3931
|
+
onMapQueryChange(query: any): void;
|
|
3932
|
+
/**
|
|
3933
|
+
* Handle splitter query change
|
|
3934
|
+
*/
|
|
3935
|
+
onSplitterQueryChange(query: any): void;
|
|
3936
|
+
/**
|
|
3937
|
+
* Handle properties query change
|
|
3938
|
+
*/
|
|
3939
|
+
onPropertiesQueryChange(query: any): void;
|
|
3940
|
+
/**
|
|
3941
|
+
* Handle snapshot query change
|
|
3942
|
+
*/
|
|
3943
|
+
onSnapshotQueryChange(query: any): void;
|
|
3944
|
+
/**
|
|
3945
|
+
* Handle groupByMultiple change
|
|
3946
|
+
*/
|
|
3947
|
+
onGroupByMultipleChange(values: string[]): void;
|
|
3948
|
+
/**
|
|
3949
|
+
* Handle repeater dashboard selection
|
|
3950
|
+
*/
|
|
3951
|
+
onRepeaterDashboardChange(dashboardId: number): void;
|
|
3952
|
+
/**
|
|
3953
|
+
* Handle isNormalized change
|
|
3954
|
+
*/
|
|
3955
|
+
onIsNormalizedChange(value: boolean): void;
|
|
3956
|
+
/**
|
|
3957
|
+
* Handle tab change
|
|
3958
|
+
*/
|
|
3959
|
+
onTabChange(tabId: string): void;
|
|
3960
|
+
/**
|
|
3961
|
+
* Handle custom API change
|
|
3962
|
+
*/
|
|
3963
|
+
onCustomApiChange(customApi: CustomApi | null): void;
|
|
3964
|
+
/**
|
|
3965
|
+
* Get chart type id for query component
|
|
3966
|
+
*/
|
|
3967
|
+
getChartTypeId(): string;
|
|
3968
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataSourceSettings, never>;
|
|
3969
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataSourceSettings, "mt-data-source-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartType": { "alias": "chartType"; "required": false; "isSignal": true; }; }, { "serviceConfigChange": "serviceConfigChange"; }, never, never, true, never>;
|
|
3970
|
+
}
|
|
3971
|
+
|
|
3972
|
+
/** Shadow configuration */
|
|
3973
|
+
interface ShadowConfig {
|
|
3974
|
+
x: number;
|
|
3975
|
+
y: number;
|
|
3976
|
+
blur: number;
|
|
3977
|
+
spread: number;
|
|
3978
|
+
color: string;
|
|
3979
|
+
}
|
|
3980
|
+
/** Override label configuration */
|
|
3981
|
+
interface OverrideLabel {
|
|
3982
|
+
en: string;
|
|
3983
|
+
ar: string;
|
|
3984
|
+
}
|
|
3985
|
+
/** Card style configuration */
|
|
3986
|
+
interface CardStyleConfig {
|
|
3987
|
+
borderRadius?: number;
|
|
3988
|
+
backgroundColor?: string;
|
|
3989
|
+
shadows?: ShadowConfig[];
|
|
3990
|
+
}
|
|
3991
|
+
/** Header card configuration */
|
|
3992
|
+
interface HeaderCardConfig {
|
|
3993
|
+
isHeaderCentered?: boolean;
|
|
3994
|
+
isHeaderHidden?: boolean;
|
|
3995
|
+
headerColor?: string;
|
|
3996
|
+
headerFontSize?: number;
|
|
3997
|
+
}
|
|
3998
|
+
/** Label center configuration */
|
|
3999
|
+
interface LabelCenterConfig {
|
|
4000
|
+
hide?: boolean;
|
|
4001
|
+
text?: {
|
|
4002
|
+
en?: string;
|
|
4003
|
+
ar?: string;
|
|
4004
|
+
};
|
|
4005
|
+
}
|
|
4006
|
+
/** Sort data bars configuration */
|
|
4007
|
+
interface SortDataBarsConfig {
|
|
4008
|
+
enable?: boolean;
|
|
4009
|
+
sortBy?: string;
|
|
4010
|
+
order?: 'asc' | 'desc' | string;
|
|
4011
|
+
direction?: 'asc' | 'desc' | string;
|
|
4012
|
+
}
|
|
4013
|
+
/** Card info configuration */
|
|
4014
|
+
interface CardInfoConfig {
|
|
4015
|
+
show?: boolean;
|
|
4016
|
+
value?: any;
|
|
4017
|
+
type?: string;
|
|
4018
|
+
}
|
|
4019
|
+
/** Format configuration */
|
|
4020
|
+
interface FormatConfig {
|
|
4021
|
+
type?: string | null;
|
|
4022
|
+
showCurrency?: boolean;
|
|
4023
|
+
handleLang?: boolean;
|
|
4024
|
+
customText?: string | null;
|
|
4025
|
+
customDateFormat?: string | null;
|
|
4026
|
+
showCurrencyTooltip?: boolean;
|
|
4027
|
+
hideSuffixes?: boolean;
|
|
4028
|
+
}
|
|
4029
|
+
/** Table format configuration */
|
|
4030
|
+
interface TableFormatConfig {
|
|
4031
|
+
thTextColor?: string | null;
|
|
4032
|
+
thBackgroundColor?: string | null;
|
|
4033
|
+
tdTextColor?: string | null;
|
|
4034
|
+
groupBackgroundColor?: string | null;
|
|
4035
|
+
groupTextColor?: string | null;
|
|
4036
|
+
thFontBold?: boolean;
|
|
4037
|
+
tdFontBold?: boolean;
|
|
4038
|
+
thFontSize?: number | null;
|
|
4039
|
+
tdFontSize?: number | null;
|
|
4040
|
+
hideTableSubheader?: boolean;
|
|
4041
|
+
disableCurrencyFormat?: boolean;
|
|
4042
|
+
showPercentageAsProgressBar?: boolean;
|
|
4043
|
+
showPercentageStatus?: boolean;
|
|
4044
|
+
hiddenColumns?: string[];
|
|
4045
|
+
sortConfig?: {
|
|
4046
|
+
column: string;
|
|
4047
|
+
direction: 'asc' | 'desc';
|
|
4048
|
+
};
|
|
4049
|
+
}
|
|
4050
|
+
/** Color condition configuration */
|
|
4051
|
+
interface ColorCondition {
|
|
4052
|
+
color: string;
|
|
4053
|
+
type: 'equal' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'between';
|
|
4054
|
+
value1?: number;
|
|
4055
|
+
value2?: number;
|
|
4056
|
+
labelEn?: string;
|
|
4057
|
+
labelAr?: string;
|
|
4058
|
+
}
|
|
4059
|
+
/** Color conditions by bar index */
|
|
4060
|
+
interface ColorConditionsByIndex {
|
|
4061
|
+
[key: number]: ColorCondition[];
|
|
4062
|
+
}
|
|
4063
|
+
/** Ring gauge configuration */
|
|
4064
|
+
interface RingGaugeConfig {
|
|
4065
|
+
centerProperty?: string;
|
|
4066
|
+
statusProperty?: string;
|
|
4067
|
+
hiddenProperties?: string[];
|
|
4068
|
+
}
|
|
4069
|
+
/** Order configuration */
|
|
4070
|
+
interface OrderConfig {
|
|
4071
|
+
order?: string[];
|
|
4072
|
+
operation?: string;
|
|
4073
|
+
orderBy?: string;
|
|
4074
|
+
}
|
|
4075
|
+
/** Card list configuration */
|
|
4076
|
+
interface CardListConfig {
|
|
4077
|
+
hideProperties?: string[];
|
|
4078
|
+
}
|
|
4079
|
+
/** Property translation entry */
|
|
4080
|
+
interface PropertyTranslation {
|
|
4081
|
+
ar: string;
|
|
4082
|
+
en: string;
|
|
4083
|
+
}
|
|
4084
|
+
/** Property translations map */
|
|
4085
|
+
interface PropertyTranslationsMap {
|
|
4086
|
+
[key: string]: PropertyTranslation;
|
|
4087
|
+
}
|
|
4088
|
+
/** Property color entry */
|
|
4089
|
+
interface PropertyColorEntry {
|
|
4090
|
+
selectedKey: string;
|
|
4091
|
+
}
|
|
4092
|
+
/** Property colors map */
|
|
4093
|
+
interface PropertyColorsMap {
|
|
4094
|
+
[key: string]: PropertyColorEntry;
|
|
4095
|
+
}
|
|
4096
|
+
/** Props config as index item */
|
|
4097
|
+
interface PropsConfigAsIndexItem {
|
|
4098
|
+
width?: string;
|
|
4099
|
+
colorAsProperty?: string;
|
|
4100
|
+
hidden?: boolean;
|
|
4101
|
+
border?: string[];
|
|
4102
|
+
}
|
|
4103
|
+
/** Format X-Axis configuration */
|
|
4104
|
+
interface FormatXAxisConfig {
|
|
4105
|
+
type?: string | null;
|
|
4106
|
+
shortFormate?: boolean;
|
|
4107
|
+
}
|
|
4108
|
+
/** Extra column from lookup configuration */
|
|
4109
|
+
interface ExtraColumnFromLookupConfig {
|
|
4110
|
+
extraCoulmnFromLookup?: boolean;
|
|
4111
|
+
lookupId?: number | null;
|
|
4112
|
+
groupedBy?: string | null;
|
|
4113
|
+
propKey?: string | null;
|
|
4114
|
+
}
|
|
4115
|
+
/** Timeline header colors config (single) */
|
|
4116
|
+
interface TimelineHeaderSingleConfig {
|
|
4117
|
+
bgColor?: string;
|
|
4118
|
+
color?: string;
|
|
4119
|
+
}
|
|
4120
|
+
/**
|
|
4121
|
+
* Display Settings Component
|
|
4122
|
+
*
|
|
4123
|
+
* Comprehensive visual/display configuration with chart-type-aware field visibility.
|
|
4124
|
+
* Shows only relevant settings based on the selected chart type.
|
|
4125
|
+
*/
|
|
4126
|
+
declare class DisplaySettings {
|
|
4127
|
+
/** Current configuration */
|
|
4128
|
+
readonly config: _angular_core.InputSignal<ItemConfig | null>;
|
|
4129
|
+
/** Selected chart type */
|
|
4130
|
+
readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
|
|
4131
|
+
/** Available properties (for property-based configs) */
|
|
4132
|
+
readonly availableProperties: _angular_core.InputSignal<any[]>;
|
|
4133
|
+
/** Selected properties from query */
|
|
4134
|
+
readonly selectedProperties: _angular_core.InputSignal<string[]>;
|
|
4135
|
+
/** Available lookups for extra column from lookup */
|
|
4136
|
+
readonly lookups: _angular_core.InputSignal<any[]>;
|
|
4137
|
+
/** Emit client config changes */
|
|
4138
|
+
readonly clientConfigChange: _angular_core.OutputEmitterRef<Partial<ClientConfig>>;
|
|
4139
|
+
/** Color condition expansion state */
|
|
4140
|
+
readonly colorConditionExpanded: _angular_core.WritableSignal<Record<number, boolean>>;
|
|
4141
|
+
/** Property translations paste state */
|
|
4142
|
+
readonly showPropertyTranslationsPaste: _angular_core.WritableSignal<boolean>;
|
|
4143
|
+
readonly propertyTranslationsPasteText: _angular_core.WritableSignal<string>;
|
|
4144
|
+
readonly propertyTranslationsPasteError: _angular_core.WritableSignal<string>;
|
|
4145
|
+
/** Property colors paste state */
|
|
4146
|
+
readonly showPropertyColorsPaste: _angular_core.WritableSignal<boolean>;
|
|
4147
|
+
readonly propertyColorsPasteText: _angular_core.WritableSignal<string>;
|
|
4148
|
+
readonly propertyColorsPasteError: _angular_core.WritableSignal<string>;
|
|
4149
|
+
/**
|
|
4150
|
+
* Chart type to fields mapping
|
|
4151
|
+
* Each chart type maps to comma-separated list of visible fields
|
|
4152
|
+
*/
|
|
4153
|
+
private readonly chartTypeFieldsMap;
|
|
4154
|
+
/** Computed fields to show based on chart type */
|
|
4155
|
+
readonly fieldsToShow: _angular_core.Signal<string>;
|
|
4156
|
+
/** Check if a field should be shown */
|
|
4157
|
+
shouldShowField(fieldName: string): boolean;
|
|
4158
|
+
/** Position options */
|
|
4159
|
+
readonly positionOptions: {
|
|
4160
|
+
label: string;
|
|
4161
|
+
value: string;
|
|
4162
|
+
}[];
|
|
4163
|
+
/** Legend position options */
|
|
4164
|
+
readonly legendPositionOptions: {
|
|
4165
|
+
label: string;
|
|
4166
|
+
value: string;
|
|
4167
|
+
}[];
|
|
4168
|
+
/** Legend icon type options */
|
|
4169
|
+
readonly legendIconOptions: {
|
|
4170
|
+
label: string;
|
|
4171
|
+
value: string;
|
|
4172
|
+
}[];
|
|
4173
|
+
/** Label position options */
|
|
4174
|
+
readonly labelPositionOptions: {
|
|
4175
|
+
label: string;
|
|
4176
|
+
value: string;
|
|
4177
|
+
}[];
|
|
4178
|
+
/** Map options */
|
|
4179
|
+
readonly mapOptions: {
|
|
4180
|
+
label: string;
|
|
4181
|
+
value: string;
|
|
4182
|
+
}[];
|
|
4183
|
+
/** Order type options */
|
|
4184
|
+
readonly orderTypeOptions: {
|
|
4185
|
+
label: string;
|
|
4186
|
+
value: string;
|
|
4187
|
+
}[];
|
|
4188
|
+
/** Order operation options */
|
|
4189
|
+
readonly orderOperationOptions: {
|
|
4190
|
+
label: string;
|
|
4191
|
+
value: string;
|
|
4192
|
+
}[];
|
|
4193
|
+
/** Border options for props config */
|
|
4194
|
+
readonly borderOptions: {
|
|
4195
|
+
label: string;
|
|
4196
|
+
value: string;
|
|
4197
|
+
}[];
|
|
4198
|
+
/** Color condition type options */
|
|
4199
|
+
readonly colorConditionTypeOptions: {
|
|
4200
|
+
label: string;
|
|
4201
|
+
value: string;
|
|
4202
|
+
}[];
|
|
4203
|
+
/** Format type options */
|
|
4204
|
+
readonly formatTypeOptions: ({
|
|
4205
|
+
label: string;
|
|
4206
|
+
value: null;
|
|
4207
|
+
} | {
|
|
4208
|
+
label: string;
|
|
4209
|
+
value: string;
|
|
4210
|
+
})[];
|
|
4211
|
+
/** Format X-Axis type options */
|
|
4212
|
+
readonly formatXAxisTypeOptions: ({
|
|
4213
|
+
label: string;
|
|
4214
|
+
value: null;
|
|
4215
|
+
} | {
|
|
4216
|
+
label: string;
|
|
4217
|
+
value: string;
|
|
4218
|
+
})[];
|
|
4219
|
+
/** Default color palette */
|
|
4220
|
+
readonly defaultColorPalette: string[];
|
|
4221
|
+
/** Current style config */
|
|
4222
|
+
readonly styleConfig: _angular_core.Signal<StyleConfig>;
|
|
4223
|
+
/** Current config as type */
|
|
4224
|
+
readonly configAsType: _angular_core.Signal<{
|
|
4225
|
+
[key: string]: any;
|
|
4226
|
+
icon?: string;
|
|
4227
|
+
breadcrumb?: any[];
|
|
4228
|
+
}>;
|
|
4229
|
+
/** Current card info */
|
|
4230
|
+
readonly cardInfo: _angular_core.Signal<CardInfoConfig>;
|
|
4231
|
+
/** Current header card config */
|
|
4232
|
+
readonly headerCardConfig: _angular_core.Signal<HeaderCardConfig>;
|
|
4233
|
+
/** Current card style config */
|
|
4234
|
+
readonly cardStyleConfig: _angular_core.Signal<CardStyleConfig>;
|
|
4235
|
+
/** Current label config */
|
|
4236
|
+
readonly labelConfig: _angular_core.Signal<{
|
|
4237
|
+
show?: boolean;
|
|
4238
|
+
showTotalInTop?: boolean;
|
|
4239
|
+
position?: string;
|
|
4240
|
+
}>;
|
|
4241
|
+
/** Current legend config */
|
|
4242
|
+
readonly legendConfig: _angular_core.Signal<{
|
|
4243
|
+
show?: boolean;
|
|
4244
|
+
position?: string;
|
|
4245
|
+
iconType?: string;
|
|
4246
|
+
}>;
|
|
4247
|
+
/** Current label center config */
|
|
4248
|
+
readonly labelCenterConfig: _angular_core.Signal<LabelCenterConfig>;
|
|
4249
|
+
/** Current sort data bars config */
|
|
4250
|
+
readonly sortDataBarsConfig: _angular_core.Signal<SortDataBarsConfig>;
|
|
4251
|
+
/** Current override labels */
|
|
4252
|
+
readonly overrideLabels: _angular_core.Signal<OverrideLabel[]>;
|
|
4253
|
+
/** Current default colors */
|
|
4254
|
+
readonly defaultColors: _angular_core.Signal<string[]>;
|
|
4255
|
+
/** Current order config */
|
|
4256
|
+
readonly orderConfig: _angular_core.Signal<any>;
|
|
4257
|
+
/** Current format config */
|
|
4258
|
+
readonly formatConfig: _angular_core.Signal<FormatConfig>;
|
|
4259
|
+
/** Current table format config */
|
|
4260
|
+
readonly tableFormatConfig: _angular_core.Signal<TableFormatConfig>;
|
|
4261
|
+
/** Current color by condition */
|
|
4262
|
+
readonly colorByCondition: _angular_core.Signal<ColorConditionsByIndex>;
|
|
4263
|
+
/** Current ring gauge config */
|
|
4264
|
+
readonly ringGaugeConfig: _angular_core.Signal<RingGaugeConfig>;
|
|
4265
|
+
/** Current card list config */
|
|
4266
|
+
readonly cardListConfig: _angular_core.Signal<CardListConfig>;
|
|
4267
|
+
/** Props config as index */
|
|
4268
|
+
readonly propsConfigAsIndex: _angular_core.Signal<PropsConfigAsIndexItem[]>;
|
|
4269
|
+
/** Property translations map */
|
|
4270
|
+
readonly propertyTranslations: _angular_core.Signal<PropertyTranslationsMap>;
|
|
4271
|
+
/** Property colors map */
|
|
4272
|
+
readonly propertyColors: _angular_core.Signal<PropertyColorsMap>;
|
|
4273
|
+
/** Format X-Axis config */
|
|
4274
|
+
readonly formatXAxisConfig: _angular_core.Signal<FormatXAxisConfig>;
|
|
4275
|
+
/** Table columns config (extra column from lookup) */
|
|
4276
|
+
readonly tableColumnsConfig: _angular_core.Signal<ExtraColumnFromLookupConfig>;
|
|
4277
|
+
/** Timeline header colors config (single object for old format) */
|
|
4278
|
+
readonly timelineHeaderColorsSingle: _angular_core.Signal<TimelineHeaderSingleConfig>;
|
|
4279
|
+
/** Toggle association */
|
|
4280
|
+
readonly toggleAssociation: _angular_core.Signal<boolean>;
|
|
4281
|
+
/** Selected properties resolved from input or config */
|
|
4282
|
+
readonly resolvedSelectedProperties: _angular_core.Signal<any[]>;
|
|
4283
|
+
/** Available properties resolved from input or selected properties */
|
|
4284
|
+
readonly resolvedAvailableProperties: _angular_core.Signal<any[]>;
|
|
4285
|
+
/** Available properties as options */
|
|
4286
|
+
readonly propertyOptions: _angular_core.Signal<{
|
|
4287
|
+
label: any;
|
|
4288
|
+
value: any;
|
|
4289
|
+
}[]>;
|
|
4290
|
+
/** Available translation options (exclude used) */
|
|
4291
|
+
readonly availableTranslationOptions: _angular_core.Signal<{
|
|
4292
|
+
label: any;
|
|
4293
|
+
value: any;
|
|
4294
|
+
}[]>;
|
|
4295
|
+
/** Available color options (exclude used) */
|
|
4296
|
+
readonly availableColorOptions: _angular_core.Signal<{
|
|
4297
|
+
label: any;
|
|
4298
|
+
value: any;
|
|
4299
|
+
}[]>;
|
|
4300
|
+
/** All property options (full list) */
|
|
4301
|
+
readonly allPropertyKeyOptions: _angular_core.Signal<{
|
|
4302
|
+
label: any;
|
|
4303
|
+
value: any;
|
|
4304
|
+
}[]>;
|
|
4305
|
+
/** Ring gauge hidden properties options */
|
|
4306
|
+
readonly ringGaugeHiddenOptions: _angular_core.Signal<{
|
|
4307
|
+
label: any;
|
|
4308
|
+
value: any;
|
|
4309
|
+
}[]>;
|
|
4310
|
+
/** Update style config property */
|
|
4311
|
+
updateStyleConfig(key: keyof StyleConfig | string, value: any): void;
|
|
4312
|
+
/** Update configAsType property */
|
|
4313
|
+
updateConfigAsType(key: string, value: any): void;
|
|
4314
|
+
/** Update nested configAsType property */
|
|
4315
|
+
updateNestedConfigAsType(parentKey: string, key: string, value: any): void;
|
|
4316
|
+
/** Update header card config */
|
|
4317
|
+
updateHeaderCardConfig(key: keyof HeaderCardConfig, value: any): void;
|
|
4318
|
+
/** Update legend settings */
|
|
4319
|
+
updateLegend(key: string, value: unknown): void;
|
|
4320
|
+
/** Update label settings */
|
|
4321
|
+
updateLabel(key: string, value: unknown): void;
|
|
4322
|
+
/** Update label center config */
|
|
4323
|
+
updateLabelCenterConfig(key: string, value: any): void;
|
|
4324
|
+
/** Update label center text */
|
|
4325
|
+
updateLabelCenterText(lang: 'en' | 'ar', value: string): void;
|
|
4326
|
+
/** Update card style config */
|
|
4327
|
+
updateCardStyleConfig(key: keyof CardStyleConfig, value: any): void;
|
|
4328
|
+
/** Update sort data bars config */
|
|
4329
|
+
updateSortDataBarsConfig(key: string, value: any): void;
|
|
4330
|
+
/** Update card info config */
|
|
4331
|
+
updateCardInfoConfig(key: string, value: any): void;
|
|
4332
|
+
/** Update border top visibility */
|
|
4333
|
+
updateBorderTopShow(show: boolean): void;
|
|
4334
|
+
/** Update border top color */
|
|
4335
|
+
updateBorderTopColor(color: string): void;
|
|
4336
|
+
/** Update map type */
|
|
4337
|
+
updateMapType(value: string): void;
|
|
4338
|
+
/** Add a new shadow */
|
|
4339
|
+
addShadow(): void;
|
|
4340
|
+
/** Remove a shadow */
|
|
4341
|
+
removeShadow(index: number): void;
|
|
4342
|
+
/** Update a shadow property */
|
|
4343
|
+
updateShadow(index: number, key: keyof ShadowConfig, value: any): void;
|
|
4344
|
+
/** Add override label */
|
|
4345
|
+
addOverrideLabel(): void;
|
|
4346
|
+
/** Remove override label */
|
|
4347
|
+
removeOverrideLabel(index: number): void;
|
|
4348
|
+
/** Update override label */
|
|
4349
|
+
updateOverrideLabel(index: number, lang: 'en' | 'ar', value: string): void;
|
|
4350
|
+
/** Add a default color */
|
|
4351
|
+
addDefaultColor(color: string): void;
|
|
4352
|
+
/** Remove a default color */
|
|
4353
|
+
removeDefaultColor(index: number): void;
|
|
4354
|
+
/** Update a default color */
|
|
4355
|
+
updateDefaultColor(index: number, color: string): void;
|
|
4356
|
+
trackByIndex(index: number): number;
|
|
4357
|
+
/** Update format config */
|
|
4358
|
+
updateFormatConfig(key: keyof FormatConfig, value: any): void;
|
|
4359
|
+
/** Update table format config */
|
|
4360
|
+
updateTableFormatConfig(key: keyof TableFormatConfig, value: any): void;
|
|
4361
|
+
/** Update table format sort config */
|
|
4362
|
+
updateTableFormatSortConfig(key: 'column' | 'direction', value: string): void;
|
|
4363
|
+
/** Reset table format to default */
|
|
4364
|
+
resetTableFormat(): void;
|
|
4365
|
+
/** Get color condition indexes */
|
|
4366
|
+
getColorConditionIndexes(): number[];
|
|
4367
|
+
/** Check if a bar index is expanded */
|
|
4368
|
+
isColorConditionExpanded(index: number): boolean;
|
|
4369
|
+
/** Toggle bar index expansion */
|
|
4370
|
+
toggleColorConditionExpanded(index: number): void;
|
|
4371
|
+
/** Add bar index for color conditions */
|
|
4372
|
+
addColorConditionIndex(): void;
|
|
4373
|
+
/** Remove bar index */
|
|
4374
|
+
removeColorConditionIndex(index: number): void;
|
|
4375
|
+
/** Add condition to bar index */
|
|
4376
|
+
addColorCondition(index: number): void;
|
|
4377
|
+
/** Remove condition from bar index */
|
|
4378
|
+
removeColorCondition(index: number, conditionIndex: number): void;
|
|
4379
|
+
/** Update color condition */
|
|
4380
|
+
updateColorCondition(index: number, conditionIndex: number, key: keyof ColorCondition, value: any): void;
|
|
4381
|
+
/** Update ring gauge config */
|
|
4382
|
+
updateRingGaugeConfig(key: keyof RingGaugeConfig, value: any): void;
|
|
4383
|
+
/** Update card list hide properties */
|
|
4384
|
+
updateCardListHideProperties(properties: string[]): void;
|
|
4385
|
+
/** Add props config item */
|
|
4386
|
+
addPropsConfigItem(): void;
|
|
4387
|
+
/** Remove props config item */
|
|
4388
|
+
removePropsConfigItem(index: number): void;
|
|
4389
|
+
/** Update props config item */
|
|
4390
|
+
updatePropsConfigItem(index: number, key: keyof PropsConfigAsIndexItem, value: any): void;
|
|
4391
|
+
/** Update order config field */
|
|
4392
|
+
updateOrderConfig(key: keyof OrderConfig, value: any): void;
|
|
4393
|
+
/** Add order item */
|
|
4394
|
+
addOrderItem(): void;
|
|
4395
|
+
/** Remove order item */
|
|
4396
|
+
removeOrderItem(index: number): void;
|
|
4397
|
+
/** Update order item */
|
|
4398
|
+
updateOrderItem(index: number, value: string): void;
|
|
4399
|
+
/** Move order item up */
|
|
4400
|
+
moveOrderItemUp(index: number): void;
|
|
4401
|
+
/** Move order item down */
|
|
4402
|
+
moveOrderItemDown(index: number): void;
|
|
4403
|
+
/** Get property translation keys */
|
|
4404
|
+
getPropertyTranslationKeys(): string[];
|
|
4405
|
+
/** Add property translation */
|
|
4406
|
+
addPropertyTranslation(propertyKey: string): void;
|
|
4407
|
+
/** Remove property translation */
|
|
4408
|
+
removePropertyTranslation(propertyKey: string): void;
|
|
4409
|
+
/** Update property translation */
|
|
4410
|
+
updatePropertyTranslation(propertyKey: string, lang: 'ar' | 'en', value: string): void;
|
|
4411
|
+
/** Get property color keys */
|
|
4412
|
+
getPropertyColorKeys(): string[];
|
|
4413
|
+
/** Add property color */
|
|
4414
|
+
addPropertyColor(propertyKey: string): void;
|
|
4415
|
+
/** Copy property translations */
|
|
4416
|
+
copyPropertyTranslations(): void;
|
|
4417
|
+
/** Toggle property translations paste area */
|
|
4418
|
+
togglePropertyTranslationsPaste(): void;
|
|
4419
|
+
/** Apply pasted property translations */
|
|
4420
|
+
applyPropertyTranslationsPaste(): void;
|
|
4421
|
+
/** Remove property color */
|
|
4422
|
+
removePropertyColor(propertyKey: string): void;
|
|
4423
|
+
/** Update property color */
|
|
4424
|
+
updatePropertyColor(propertyKey: string, selectedKey: string): void;
|
|
4425
|
+
/** Copy property colors */
|
|
4426
|
+
copyPropertyColors(): void;
|
|
4427
|
+
/** Toggle property colors paste area */
|
|
4428
|
+
togglePropertyColorsPaste(): void;
|
|
4429
|
+
/** Apply pasted property colors */
|
|
4430
|
+
applyPropertyColorsPaste(): void;
|
|
4431
|
+
/** Update format X-Axis config */
|
|
4432
|
+
updateFormatXAxisConfig(key: keyof FormatXAxisConfig, value: any): void;
|
|
4433
|
+
/** Update table columns config */
|
|
4434
|
+
updateTableColumnsConfig(key: keyof ExtraColumnFromLookupConfig, value: any): void;
|
|
4435
|
+
/** Update timeline header colors (single config) */
|
|
4436
|
+
updateTimelineHeaderColorSingle(key: 'bgColor' | 'color', value: string): void;
|
|
4437
|
+
/** Update toggle association */
|
|
4438
|
+
updateToggleAssociation(value: boolean): void;
|
|
4439
|
+
/** Selected property for adding translations */
|
|
4440
|
+
readonly selectedPropertyForTranslation: _angular_core.WritableSignal<string>;
|
|
4441
|
+
/** Selected property for adding colors */
|
|
4442
|
+
readonly selectedPropertyForColor: _angular_core.WritableSignal<string>;
|
|
4443
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DisplaySettings, never>;
|
|
4444
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DisplaySettings, "mt-display-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartType": { "alias": "chartType"; "required": false; "isSignal": true; }; "availableProperties": { "alias": "availableProperties"; "required": false; "isSignal": true; }; "selectedProperties": { "alias": "selectedProperties"; "required": false; "isSignal": true; }; "lookups": { "alias": "lookups"; "required": false; "isSignal": true; }; }, { "clientConfigChange": "clientConfigChange"; }, never, never, true, never>;
|
|
4445
|
+
}
|
|
4446
|
+
|
|
4447
|
+
/** Action type option */
|
|
4448
|
+
interface ActionTypeOption {
|
|
4449
|
+
readonly label: string;
|
|
4450
|
+
readonly value: string;
|
|
4451
|
+
readonly icon: string;
|
|
4452
|
+
}
|
|
4453
|
+
/** Trigger option */
|
|
4454
|
+
interface TriggerOption {
|
|
4455
|
+
readonly label: string;
|
|
4456
|
+
readonly value: string;
|
|
4457
|
+
readonly icon: string;
|
|
4458
|
+
}
|
|
4459
|
+
/** Dynamic/Static key pair */
|
|
4460
|
+
interface KeyPair {
|
|
4461
|
+
propertyKey: string;
|
|
4462
|
+
propertyValue: string;
|
|
4463
|
+
}
|
|
4464
|
+
/**
|
|
4465
|
+
* Actions Settings Component
|
|
4466
|
+
*
|
|
4467
|
+
* Handles chart action configuration:
|
|
4468
|
+
* - Click actions (open dialog, navigate, custom function)
|
|
4469
|
+
* - Trigger types (click, double-click, hover)
|
|
4470
|
+
* - Action configuration
|
|
4471
|
+
*/
|
|
4472
|
+
declare class ActionsSettings {
|
|
4473
|
+
/** Current configuration */
|
|
4474
|
+
readonly config: _angular_core.InputSignal<ItemConfig | null>;
|
|
4475
|
+
/** Emit client config changes */
|
|
4476
|
+
readonly clientConfigChange: _angular_core.OutputEmitterRef<Partial<ClientConfig>>;
|
|
4477
|
+
/** Action type options - using valid icons from icons.json */
|
|
4478
|
+
readonly actionTypeOptions: readonly ActionTypeOption[];
|
|
4479
|
+
/** Trigger type options - using valid icons from icons.json */
|
|
4480
|
+
readonly triggerOptions: readonly TriggerOption[];
|
|
4481
|
+
/** Current actions list */
|
|
4482
|
+
readonly actions: _angular_core.Signal<ActionConfig[]>;
|
|
4483
|
+
/**
|
|
4484
|
+
* Get current actions array safely
|
|
4485
|
+
*/
|
|
4486
|
+
private getCurrentActions;
|
|
4487
|
+
/**
|
|
4488
|
+
* Emit updated actions
|
|
4489
|
+
*/
|
|
4490
|
+
private emitActions;
|
|
4491
|
+
/**
|
|
4492
|
+
* Get action at index safely
|
|
4493
|
+
*/
|
|
4494
|
+
private getActionAt;
|
|
4495
|
+
/**
|
|
4496
|
+
* Add a new action
|
|
4497
|
+
*/
|
|
4498
|
+
addAction(): void;
|
|
4499
|
+
/**
|
|
4500
|
+
* Remove an action
|
|
4501
|
+
*/
|
|
4502
|
+
removeAction(index: number): void;
|
|
4503
|
+
/**
|
|
4504
|
+
* Duplicate an action
|
|
4505
|
+
*/
|
|
4506
|
+
duplicateAction(index: number): void;
|
|
4507
|
+
/**
|
|
4508
|
+
* Update an action property
|
|
4509
|
+
*/
|
|
4510
|
+
updateAction<K extends keyof ActionConfig>(index: number, key: K, value: ActionConfig[K]): void;
|
|
4511
|
+
/**
|
|
4512
|
+
* Update action config object
|
|
4513
|
+
*/
|
|
4514
|
+
updateActionConfig(index: number, configKey: string, value: unknown): void;
|
|
4515
|
+
/**
|
|
4516
|
+
* Move action up in the list
|
|
4517
|
+
*/
|
|
4518
|
+
moveActionUp(index: number): void;
|
|
4519
|
+
/**
|
|
4520
|
+
* Move action down in the list
|
|
4521
|
+
*/
|
|
4522
|
+
moveActionDown(index: number): void;
|
|
4523
|
+
/**
|
|
4524
|
+
* Get action type label
|
|
4525
|
+
*/
|
|
4526
|
+
getActionTypeLabel(actionType: string): string;
|
|
4527
|
+
/**
|
|
4528
|
+
* Get trigger type label
|
|
4529
|
+
*/
|
|
4530
|
+
getTriggerLabel(trigger: string): string;
|
|
4531
|
+
/**
|
|
4532
|
+
* Add a dynamic key to action
|
|
4533
|
+
*/
|
|
4534
|
+
addDynamicKey(actionIndex: number): void;
|
|
4535
|
+
/**
|
|
4536
|
+
* Remove a dynamic key from action
|
|
4537
|
+
*/
|
|
4538
|
+
removeDynamicKey(actionIndex: number, keyIndex: number): void;
|
|
4539
|
+
/**
|
|
4540
|
+
* Update a dynamic key
|
|
4541
|
+
*/
|
|
4542
|
+
updateDynamicKey(actionIndex: number, keyIndex: number, field: keyof KeyPair, value: string): void;
|
|
4543
|
+
/**
|
|
4544
|
+
* Add a static key to action
|
|
4545
|
+
*/
|
|
4546
|
+
addStaticKey(actionIndex: number): void;
|
|
4547
|
+
/**
|
|
4548
|
+
* Remove a static key from action
|
|
4549
|
+
*/
|
|
4550
|
+
removeStaticKey(actionIndex: number, keyIndex: number): void;
|
|
4551
|
+
/**
|
|
4552
|
+
* Update a static key
|
|
4553
|
+
*/
|
|
4554
|
+
updateStaticKey(actionIndex: number, keyIndex: number, field: keyof KeyPair, value: string): void;
|
|
4555
|
+
/**
|
|
4556
|
+
* Track by action id for ngFor
|
|
4557
|
+
*/
|
|
4558
|
+
trackByActionId(_index: number, action: ActionConfig): string;
|
|
4559
|
+
/**
|
|
4560
|
+
* Track by index helper
|
|
4561
|
+
*/
|
|
4562
|
+
trackByIndex(index: number): number;
|
|
4563
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionsSettings, never>;
|
|
4564
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionsSettings, "mt-actions-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, { "clientConfigChange": "clientConfigChange"; }, never, never, true, never>;
|
|
4565
|
+
}
|
|
4566
|
+
|
|
4567
|
+
/**
|
|
4568
|
+
* Chart Viewer Component
|
|
4569
|
+
*
|
|
4570
|
+
* Simple preview component that wraps dashboard-item.
|
|
4571
|
+
* Used in manage-item to show live preview of the chart being configured.
|
|
4572
|
+
*/
|
|
4573
|
+
declare class ChartViewer {
|
|
4574
|
+
/** Chart configuration */
|
|
4575
|
+
readonly config: _angular_core.InputSignal<ItemConfig | null>;
|
|
4576
|
+
/** Chart type ID */
|
|
4577
|
+
readonly chartTypeId: _angular_core.InputSignal<string>;
|
|
4578
|
+
/** Loading state for refresh */
|
|
4579
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
4580
|
+
/** Refresh the preview */
|
|
4581
|
+
refresh(): void;
|
|
4582
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartViewer, never>;
|
|
4583
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartViewer, "mt-chart-viewer", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartTypeId": { "alias": "chartTypeId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4584
|
+
}
|
|
4585
|
+
|
|
4586
|
+
/**
|
|
4587
|
+
* Filter items by group ID
|
|
4588
|
+
*
|
|
4589
|
+
* Returns items that belong to a specific group, sorted by orderInGroup
|
|
4590
|
+
*/
|
|
4591
|
+
declare class FilterByGroupPipe implements PipeTransform {
|
|
4592
|
+
transform(items: DashboardChartItem[], groupId?: string): DashboardChartItem[];
|
|
4593
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterByGroupPipe, never>;
|
|
4594
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<FilterByGroupPipe, "filterByGroup", true>;
|
|
4595
|
+
}
|
|
4596
|
+
|
|
4597
|
+
/**
|
|
4598
|
+
* Get dialog actions for a chart
|
|
4599
|
+
*
|
|
4600
|
+
* Returns menu items for dialog management (add, edit, delete)
|
|
4601
|
+
* Used in the "Advanced" popover menu
|
|
4602
|
+
*/
|
|
4603
|
+
declare class GetChartActionsPipe implements PipeTransform {
|
|
4604
|
+
private transloco;
|
|
4605
|
+
transform(chart: DashboardChartItem, context: ChartActionsContext): MTMenuItem[];
|
|
4606
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GetChartActionsPipe, never>;
|
|
4607
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<GetChartActionsPipe, "getChartActions", true>;
|
|
4608
|
+
}
|
|
4609
|
+
|
|
4610
|
+
/**
|
|
4611
|
+
* Deep clone an object
|
|
4612
|
+
*/
|
|
4613
|
+
declare function cloneDeep<T>(obj: T): T;
|
|
4614
|
+
|
|
4615
|
+
export { ActionsSettings, BarChartHandler, BarControlUi, CHART_TYPES, CardContentComponent, CardFilterComponent, ChartCardComponent, ChartDataService, ChartSettingsDrawer, ChartViewer, ComparisonChartHandler, DashboardBuilder, DashboardBuilderService, DashboardItem, DashboardItemStoreService, DashboardList, DashboardStoreService, DashboardViewer, DataSourceSettings, DefaultControlUi, DisplaySettings, DynamicFiltersConfig, EChartComponent, EntityInfoComponent, EntityPreviewCardComponent, FilterByGroupPipe, GaugeChartHandler, GeneralSettings, GetChartActionsPipe, HTTPMethod, HeaderCardComponent, LevelCardHandler, LevelCardListComponent, LineChartHandler, ListStatisticCardComponent, ManageBreadcrumb, ManageFilterOnPage, ManageItem, ManageItemService, ManagePages, MapChartHandler, OverviewCardHandler, PhaseGateStepperHandler, PieChartHandler, PieControlUi, RingGaugeChartHandler, SPlusChartHandler, SkeletonCardComponent, SnapshotHandler, SplitterChartHandler, StackBarChartHandler, StackBarControlUi, StatisticCardComponent, TableCardComponent, TableViewHandler, TimelineHandler, addCommasToNumber, axisFormatters, cloneDeep, createAxisFormatter, createTooltipFormatter, dynamicReorder, dynamicTextReplace, formatCurrency, formatDate, formatNumber, formatPercentage, formatValue, formatWordsUnderBar, generalConfiguration, getColorFromConditions, getLanguageCode, getLocalizedTitle, getNestedData, groupDatesByYearAndMonth, handleFilterForCard, handleFilterForSnapshot, handleFiltersForCustom, isMobilePlatform, sortChartData, sortDataTableView, switchAllKeysSmall, switchAllKeysToLower };
|
|
4616
|
+
export type { ActionConfig, ApiResponse, BarChartData, BreadcrumbItem, BulkLinkChartRequest, BulkLinkChartResponse, BulkPropertiesRequest, BulkPropertiesResponse, BulkPropertiesResponseItem, BulkPropertyRequestItem, CardBorderStyleConfig, CardStyleConfig$1 as CardStyleConfig, ChartActionEvent, ChartActionsContext, ChartData, ChartDataHandled, ChartLabel, ChartLinkConfiguration, ChartTypeConfig, ClientConfig, ComponentType, CustomApi, DashboardChartItem, DashboardDialogItem, DashboardItemStore, DashboardListEvent, DashboardPage, DisplayConfig, EChartSeriesItem, ExcelSheet, FilterConfig, FilterOption, GroupedModuleOption, HandleAction, HeaderCardConfig$1 as HeaderCardConfig, IModule, IModuleType, IProperty, IPropertyWithGroup, ISelection, ItemConfig, LevelCardData, LevelCardProperty, LinkChartRequest, LocalizedName, ModuleItem, ModuleSelectOption, ModuleType, ModuleValue, ModulesTreeRequest, ModulesTreeResponse, PhaseGateProperty, PhaseGateStep, PieChartData, PropertiesResponse, PropertyItem$1 as PropertyItem, PropertyItemOption, PropertyItemsResponse, QuickManageType, Report, ReportChartLink, ReportDashboardConfig, ReportExcelConfig, ReportType, ReportUrl, RequestType, SelectionFilter, ServiceConfig, ServiceItem, SourceLink, StatisticCardData, StyleConfig, TableColumn$1 as TableColumn, TableViewData, TimelineData, TimelineItem, UnlinkChartRequest };
|