@masterteam/task-schedule 0.0.3 → 0.0.5

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.
@@ -1,9 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, OnDestroy, InjectionToken } from '@angular/core';
2
+ import { OnInit, OnDestroy } from '@angular/core';
3
3
  import { GanttComponent, ContextMenuOpenEventArgs, ContextMenuClickEventArgs } from '@syncfusion/ej2-angular-gantt';
4
- import * as rxjs from 'rxjs';
5
4
  import { Observable } from 'rxjs';
6
5
  import { EntityData } from '@masterteam/components/entities';
6
+ import { ModalService } from '@masterteam/components/modal';
7
+ import { ColumnDef } from '@masterteam/components/table';
7
8
  import * as _masterteam_task_schedule from '@masterteam/task-schedule';
8
9
 
9
10
  type TaskScheduleModelKey = 'default' | 'edit' | 'baseline' | 'criticalPath' | 'resources' | 'unscheduled' | 'phaseGate' | 'custom';
@@ -12,6 +13,8 @@ type TaskScheduleModelType = TaskScheduleModelKey | TaskScheduleModelAlias | str
12
13
  interface TaskScheduleModeOption {
13
14
  value: TaskScheduleModelType;
14
15
  label?: string;
16
+ icon?: string;
17
+ color?: string;
15
18
  }
16
19
  declare function normalizeTaskScheduleModelType(modelType: TaskScheduleModelType): TaskScheduleModelKey;
17
20
  interface TaskScheduleContext {
@@ -19,8 +22,10 @@ interface TaskScheduleContext {
19
22
  modelType?: TaskScheduleModelType;
20
23
  schemaId?: number | string;
21
24
  levelDataId?: number | string;
25
+ taskModuleId?: number | string;
26
+ milestoneModuleId?: number | string;
27
+ deliverableModuleId?: number | string;
22
28
  customViewId?: number | string;
23
- apiBaseUrl?: string;
24
29
  scheduleViewKey?: string;
25
30
  dateFormat?: string;
26
31
  height?: string;
@@ -35,7 +40,6 @@ interface TaskScheduleContext {
35
40
  pdfFonts?: TaskSchedulePdfFonts;
36
41
  customProperties?: TaskScheduleCustomProperty[];
37
42
  customColumns?: Array<Record<string, unknown>>;
38
- requestHeaders?: Record<string, string>;
39
43
  langCode?: 'en' | 'ar';
40
44
  modelCacheKey?: string;
41
45
  [key: string]: unknown;
@@ -45,29 +49,33 @@ interface TaskSchedulePdfFonts {
45
49
  arabic?: string;
46
50
  size?: number;
47
51
  }
48
- interface TaskScheduleContextEndpoints {
52
+ interface TaskScheduleCoreContextEndpoints {
53
+ processSubmit?: string;
54
+ scheduleRead?: string;
55
+ scheduleQuery?: string;
49
56
  scheduleTree?: string;
50
57
  scheduleTreePhaseGate?: string;
58
+ }
59
+ interface TaskScheduleFeatureContextEndpoints {
60
+ scheduleDependencies?: string;
61
+ scheduleTimeline?: string;
62
+ scheduleBaselines?: string;
63
+ scheduleBaselineByVersion?: string;
51
64
  scheduleManagerBase?: string;
52
65
  scheduleViewById?: string;
53
66
  scheduleViewsByLevel?: string;
54
67
  scheduleSettingsByLevel?: string;
55
- teamMembers?: string;
56
- createTask?: string;
57
- updateTask?: string;
58
- deleteTask?: string;
59
- updateBulkTasks?: string;
60
- updateParent?: string;
61
- updateOrder?: string;
62
- updateProgress?: string;
63
68
  importTasks?: string;
64
69
  applyImportedTasks?: string;
65
70
  setBaseline?: string;
66
71
  exportTasks?: string;
67
- [key: string]: string | undefined;
68
72
  }
73
+ type TaskScheduleContextEndpoints = TaskScheduleCoreContextEndpoints & Partial<TaskScheduleFeatureContextEndpoints> & {
74
+ [key: string]: string | undefined;
75
+ };
69
76
  interface TaskScheduleTask {
70
77
  id: number | string;
78
+ schemaId?: number | string | null;
71
79
  title: string;
72
80
  name?: string;
73
81
  startDate?: Date | string | null;
@@ -80,6 +88,7 @@ interface TaskScheduleTask {
80
88
  actualFinishDate?: Date | string | null;
81
89
  baselineStartDate?: Date | string | null;
82
90
  baselineEndDate?: Date | string | null;
91
+ baselineDuration?: number | null;
83
92
  duration?: number | null;
84
93
  progress?: number | null;
85
94
  predecessor?: string | null;
@@ -92,12 +101,15 @@ interface TaskScheduleTask {
92
101
  guid?: string | null;
93
102
  uniqueID?: string | null;
94
103
  parentGuid?: string | null;
104
+ parentId?: number | string | null;
95
105
  assignedTo?: string | number | Record<string, unknown> | null;
96
106
  resources?: Array<number | string | {
97
107
  resourceId: number | string;
98
- unit?: number;
108
+ unit?: number | string;
109
+ resourceName?: string;
99
110
  }>;
100
111
  phaseGate?: string | null;
112
+ phaseGateId?: number | string | null;
101
113
  criticalPath?: boolean;
102
114
  order?: number;
103
115
  customProperties?: Array<Record<string, unknown>>;
@@ -134,15 +146,31 @@ interface TaskScheduleCustomProperty {
134
146
  }
135
147
  interface TaskScheduleTaskMutation {
136
148
  assignedTo?: number | string | null;
137
- name: string;
149
+ name?: string;
138
150
  startDate?: string | Date | null;
139
151
  finishDate?: string | Date | null;
152
+ actualStart?: string | Date | null;
153
+ actualFinish?: string | Date | null;
154
+ baselineStart?: string | Date | null;
155
+ baselineFinish?: string | Date | null;
156
+ baselineProgress?: number | null;
140
157
  predecessor?: string | null;
158
+ predecessors?: TaskScheduleDependencyMutation[] | null;
141
159
  details?: string | null;
142
160
  type?: string | null;
143
161
  duration?: number | null;
144
162
  progress?: number | null;
163
+ status?: string | null;
145
164
  parentGuid?: string | null;
165
+ parentId?: number | string | null;
166
+ phaseGateId?: number | string | null;
167
+ resources?: TaskScheduleTask['resources'];
168
+ attachments?: unknown;
169
+ isSummary?: boolean | null;
170
+ externalId?: string | null;
171
+ externalParentId?: string | null;
172
+ order?: number | null;
173
+ weight?: number | null;
146
174
  props?: Array<Record<string, unknown>>;
147
175
  [key: string]: unknown;
148
176
  }
@@ -150,6 +178,67 @@ interface TaskScheduleTaskOrderUpdate {
150
178
  taskId: number | string;
151
179
  order: number;
152
180
  }
181
+ type TaskScheduleDependencyType = 0 | 1 | 2 | 3 | 'FinishToStart' | 'StartToStart' | 'FinishToFinish' | 'StartToFinish';
182
+ interface TaskScheduleDependencyMutation {
183
+ predecessorId: number | string;
184
+ type?: TaskScheduleDependencyType | null;
185
+ lagDays?: number | null;
186
+ }
187
+ interface TaskScheduleDependency extends TaskScheduleDependencyMutation {
188
+ id: number | string;
189
+ successorId: number | string;
190
+ }
191
+ type TaskScheduleTimelineMode = 'weekly' | 'monthly' | 'quarterly' | 'biannually' | 'annually';
192
+ interface TaskScheduleTimelineBucket {
193
+ name: string;
194
+ number: number;
195
+ start: Date | string | null;
196
+ end: Date | string | null;
197
+ year?: number | null;
198
+ id: string;
199
+ seq?: number | null;
200
+ }
201
+ interface TaskScheduleBaselineVersion {
202
+ version: number;
203
+ createdAt: Date | string | null;
204
+ createdBy?: string | null;
205
+ itemCount?: number | null;
206
+ }
207
+ interface TaskScheduleBaselineSnapshotItem {
208
+ snapshotId?: number | string | null;
209
+ levelDataId?: number | string | null;
210
+ scheduleItemId?: number | string | null;
211
+ currentScheduleItemId?: number | string | null;
212
+ name?: string | null;
213
+ type?: string | null;
214
+ typeLable?: string | null;
215
+ status?: string | null;
216
+ externalId?: string | null;
217
+ externalParentId?: string | null;
218
+ guid?: string | null;
219
+ parentGuid?: string | null;
220
+ order?: number | null;
221
+ isSummary?: boolean;
222
+ assignedTo?: string | null;
223
+ resources?: Array<number | string | Record<string, unknown>>;
224
+ baselineStart?: Date | string | null;
225
+ baselineFinish?: Date | string | null;
226
+ baselineProgress?: number | null;
227
+ currentStart?: Date | string | null;
228
+ currentFinish?: Date | string | null;
229
+ currentProgress?: number | null;
230
+ currentStatus?: string | null;
231
+ currentAssignedTo?: string | null;
232
+ currentResources?: Array<number | string | Record<string, unknown>>;
233
+ existsInCurrentSchedule?: boolean;
234
+ }
235
+ interface TaskScheduleBaselineSnapshot {
236
+ levelDataId: number | string;
237
+ version: number;
238
+ createdAt: Date | string | null;
239
+ createdBy?: string | null;
240
+ items: TaskScheduleBaselineSnapshotItem[];
241
+ }
153
242
  interface TaskScheduleImportResult {
154
243
  fileName?: string | null;
155
244
  tasks: TaskScheduleTask[];
@@ -171,8 +260,16 @@ interface TaskScheduleDataResult {
171
260
  projectStartDate?: Date | string | null;
172
261
  projectEndDate?: Date | string | null;
173
262
  }
174
- interface TaskScheduleDataAdapter {
263
+ interface TaskScheduleFetchDataAdapter {
175
264
  load(modelType: TaskScheduleModelType, context: TaskScheduleContext): Observable<TaskScheduleDataResult>;
265
+ importTasks?(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
266
+ exportTasks?(context: TaskScheduleContext): Observable<Blob>;
267
+ loadDependencies?(context: TaskScheduleContext): Observable<TaskScheduleDependency[]>;
268
+ loadTimeline?(context: TaskScheduleContext, mode: TaskScheduleTimelineMode): Observable<TaskScheduleTimelineBucket[]>;
269
+ loadBaselineVersions?(context: TaskScheduleContext): Observable<TaskScheduleBaselineVersion[]>;
270
+ loadBaselineSnapshot?(context: TaskScheduleContext, version?: number | 'latest'): Observable<TaskScheduleBaselineSnapshot>;
271
+ }
272
+ interface TaskScheduleActionDataAdapter {
176
273
  createTask?(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
177
274
  updateTask?(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
178
275
  deleteTask?(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
@@ -180,10 +277,8 @@ interface TaskScheduleDataAdapter {
180
277
  updateParent?(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
181
278
  updateOrder?(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
182
279
  updateProgress?(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
183
- importTasks?(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
184
280
  applyImportedTasks?(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
185
281
  setBaseline?(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
186
- exportTasks?(context: TaskScheduleContext): Observable<Blob>;
187
282
  }
188
283
  interface TaskScheduleGanttConfig {
189
284
  taskFields: Record<string, unknown>;
@@ -203,6 +298,7 @@ interface TaskScheduleGanttConfig {
203
298
  eventMarkers?: Array<Record<string, unknown>>;
204
299
  timelineSettings?: Record<string, unknown>;
205
300
  editSettings?: Record<string, unknown>;
301
+ allowRowDragAndDrop?: boolean;
206
302
  addDialogFields?: Array<Record<string, unknown>>;
207
303
  editDialogFields?: Array<Record<string, unknown>>;
208
304
  contextMenuItems?: Array<string | Record<string, unknown>>;
@@ -214,10 +310,12 @@ interface TaskScheduleGanttConfig {
214
310
  projectEndDate?: Date | string | null;
215
311
  }
216
312
 
217
- declare const EDIT_TASK_TYPE_IDS: readonly ["Milestone", "Task", "Deliverable"];
313
+ type EditTaskTypeId = 'Milestone' | 'Task' | 'Deliverable';
218
314
  declare class TaskSchedule implements OnInit, OnDestroy {
219
315
  ganttObj?: GanttComponent;
220
- private readonly adapter;
316
+ private readonly fetchService;
317
+ private readonly actionService;
318
+ private readonly modal;
221
319
  private readonly queueService;
222
320
  private readonly injector;
223
321
  private loadEffect?;
@@ -225,6 +323,7 @@ declare class TaskSchedule implements OnInit, OnDestroy {
225
323
  private loadSubscription?;
226
324
  private readonly operationSub;
227
325
  private readonly contextAddTask;
326
+ private readonly contextAddAnchorTask;
228
327
  private readonly customProperties;
229
328
  readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
230
329
  readonly toolbarAction: _angular_core.OutputEmitterRef<string>;
@@ -244,8 +343,9 @@ declare class TaskSchedule implements OnInit, OnDestroy {
244
343
  readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
245
344
  readonly isEditMode: _angular_core.Signal<boolean>;
246
345
  readonly editTaskTypes: _angular_core.Signal<{
247
- id: (typeof EDIT_TASK_TYPE_IDS)[number];
346
+ id: EditTaskTypeId;
248
347
  text: string;
348
+ moduleId: number | string;
249
349
  }[]>;
250
350
  readonly enableRtl: _angular_core.Signal<boolean>;
251
351
  readonly tooltipTranslations: _angular_core.Signal<{
@@ -267,159 +367,159 @@ declare class TaskSchedule implements OnInit, OnDestroy {
267
367
  onDataBound(): void;
268
368
  private loadSchedule;
269
369
  private applyEditCustomProps;
270
- private configureDialogState;
271
- private applyDependentFieldBehavior;
370
+ private openScheduleDialog;
272
371
  private handleRowDropped;
273
- private createTask;
274
372
  private updateTask;
275
373
  private deleteTask;
276
374
  private pushBulkUpdate;
277
- private buildMutationFromTask;
278
375
  private resolveParentGuidForContextAddTask;
279
- private getCustomPropsValue;
376
+ private buildCreateDialogTask;
377
+ private clearContextAddState;
378
+ private isContextAddAction;
379
+ private readEditTaskFromArgs;
380
+ private readAnchorTaskFromArgs;
381
+ private isProgressOnlyTaskbarEdit;
280
382
  private getGeneralDialogFields;
281
383
  private reloadSchedule;
282
- private normalizeTasks;
283
- private extractCustomProps;
284
- private readNamedValue;
285
- private readType;
286
- private readAssignedTo;
287
- private readResources;
288
384
  private extractDateValue;
289
385
  private mapColumnEditType;
290
- private getDialogFieldInstance;
291
- private removeValidationRule;
292
- private toggleAddAndEditButtons;
293
- private toggleToolbarButton;
294
- private normalizeDuration;
295
- private safeProgress;
296
386
  private coerceDate;
297
387
  private toApiDate;
298
388
  private exportPdfWithRetry;
299
- private resolvePdfExportFont;
300
- private createEmbeddedPdfFont;
301
- private isFitToWidthError;
302
- private resetPdfModule;
303
- private wait;
304
- private getErrorMessage;
305
389
  private getExportFileName;
306
390
  private hexToRgb;
307
- private localizeTaskType;
308
- private readLegacyHolidays;
309
391
  formatDateValue(value: unknown): string;
310
392
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskSchedule, never>;
311
393
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskSchedule, "mt-task-schedule", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; }, { "toolbarAction": "toolbarAction"; "actionBegin": "actionBegin"; "actionCompleted": "actionCompleted"; "loaded": "loaded"; "loadError": "loadError"; }, never, never, true, never>;
312
394
  }
313
395
 
314
- declare const TASK_SCHEDULE_DATA_ADAPTER: InjectionToken<TaskScheduleDataAdapter>;
315
- declare class TaskScheduleBackendAdapter implements TaskScheduleDataAdapter {
396
+ declare class TaskScheduleFetchService implements TaskScheduleFetchDataAdapter {
316
397
  private readonly http;
317
398
  load(modelType: TaskScheduleModelType, context: TaskScheduleContext): Observable<TaskScheduleDataResult>;
318
- private resolveReadPayload;
319
- private loadScheduleQueryPayload;
320
- private loadScheduleUtilityPayload;
321
- private loadLegacyPhaseGatePayload;
322
- private composeFetchPayload;
323
- private resolveFetchRootRecords;
324
- private toFetchSchemaMap;
325
- private mapFetchRecords;
326
- private mapFetchRecord;
327
- private readFetchCustomProps;
328
- private mapFetchCustomProperties;
329
- private mergeFetchCustomProperties;
330
- private readFetchCellRaw;
331
- private readFetchCellValue;
332
- private readFetchCellDisplay;
333
- private readFetchOrder;
334
- createTask(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
335
- updateTask(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
336
- deleteTask(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
337
- updateBulkTasks(context: TaskScheduleContext, payload: TaskScheduleTaskMutation[]): Observable<unknown>;
338
- updateParent(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
339
- updateOrder(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
340
- updateProgress(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
341
399
  importTasks(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
342
- applyImportedTasks(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
343
- setBaseline(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
344
400
  exportTasks(context: TaskScheduleContext): Observable<Blob>;
345
- private mapRuntimeMutationPayload;
346
- private mapRuntimeBulkUpdatePayload;
347
- private mapRuntimeOrderUpdatePayload;
348
- private resolveRuntimeScheduleItemType;
349
- private loadCustomColumns;
350
- private resolveTreeRouteTemplate;
351
- private buildTreeRouteParams;
352
- private resolveTaskMutationEndpoint;
353
- private resolveApplyImportedTasksEndpoint;
354
- private resolveScheduleManagerEndpoint;
355
- private resolveApiUrl;
356
- private readHeaders;
357
- private buildIdempotencyKey;
358
- private unwrapResponse;
359
- private extractTaskArray;
360
- private normalizeTaskRows;
361
- private flattenResourceGroups;
362
- private attachGroupResource;
363
- private mergeTaskResources;
364
- private resolveResourceIdentity;
365
- private mapRuntimeTask;
366
- private applyModelTransformations;
401
+ loadDependencies(context: TaskScheduleContext): Observable<TaskScheduleDependency[]>;
402
+ loadTimeline(context: TaskScheduleContext, mode: TaskScheduleTimelineMode): Observable<TaskScheduleTimelineBucket[]>;
403
+ loadBaselineVersions(context: TaskScheduleContext): Observable<TaskScheduleBaselineVersion[]>;
404
+ loadBaselineSnapshot(context: TaskScheduleContext, version?: number | 'latest'): Observable<TaskScheduleBaselineSnapshot>;
405
+ private loadReadResult;
406
+ private loadBaselineResult;
407
+ private loadPhaseGateResult;
408
+ private readScheduleMode;
409
+ private mapQueryTasks;
410
+ private mapGroupedTasks;
411
+ private mapLooseTasks;
412
+ private mapTaskSource;
413
+ private mapCustomProperties;
414
+ private mapCustomValues;
415
+ private buildBaselineTasks;
416
+ private buildTree;
367
417
  private resolveResources;
368
- private mapTeamMemberResources;
369
- private extractObjectValue;
370
- private extractObjectArray;
371
- private extractCustomProperties;
372
- private mapCustomProperty;
373
- private normalizeLookupOptions;
374
- private readLegacyHolidaysFromLocalStorage;
375
- private extractArrayCandidate;
376
418
  private extractResources;
419
+ private mapTeamMemberResources;
420
+ private loadCustomColumns;
377
421
  private mapScheduleColumns;
378
422
  private normalizeCustomColumnKey;
379
423
  private readLocalizedName;
380
- private extractTaskResources;
381
- private extractAssignee;
382
- private extractStatus;
383
- private extractProgress;
384
- private extractDate;
385
- private backendError;
424
+ private readData;
425
+ private levelEndpoint;
426
+ private requireId;
386
427
  private readEndpoint;
428
+ private interpolateEndpointTemplate;
429
+ private extractTaskRows;
430
+ private extractArray;
431
+ private readObjectValue;
432
+ private readSourceValue;
433
+ private readNestedValue;
434
+ private readSourceRawValue;
435
+ private readObjectValueByKey;
436
+ private unwrapValue;
437
+ private unwrapRawValue;
438
+ private normalizeTaskType;
439
+ private localizeTaskType;
440
+ private normalizeResources;
441
+ private mergeResources;
442
+ private resolveAssignedTo;
443
+ private resolveResourceId;
444
+ private readResourceName;
445
+ private mapDependency;
446
+ private mapTimelineBucket;
447
+ private mapBaselineVersion;
448
+ private mapBaselineSnapshot;
449
+ private normalizeDependencyType;
450
+ private normalizeDuration;
451
+ private normalizeProgress;
452
+ private readNamedString;
453
+ private toDate;
454
+ private readLegacyHolidays;
387
455
  private readId;
388
- private firstDefined;
389
456
  private toNullableString;
390
457
  private toNullableNumber;
391
458
  private toTaskId;
392
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleBackendAdapter, never>;
393
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleBackendAdapter>;
459
+ private isObject;
460
+ private isEmptyIdentityValue;
461
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleFetchService, never>;
462
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleFetchService>;
394
463
  }
395
464
 
396
- declare class TaskScheduleQueueService {
397
- private readonly basicOrderColumns;
398
- private readonly currentOrderColumns;
399
- private readonly refreshTasks;
400
- readonly refreshTasks$: rxjs.Observable<void>;
401
- refresh(): void;
402
- reorderData(tasks: TaskScheduleTask[]): TaskScheduleTask[];
403
- applyStoredColumnOrder(columns: Array<Record<string, unknown>>, modelType: TaskScheduleModelType, context: TaskScheduleContext): Array<Record<string, unknown>>;
404
- reorderColumn(args: any, modelType: TaskScheduleModelType, context: TaskScheduleContext): void;
405
- private mapColumnsToOrder;
406
- private orderColumns;
407
- private getStorageKey;
408
- private getLegacyStorageKey;
409
- private hasDuplicateOrders;
410
- private safeParseOrder;
411
- private getLocalStorageItem;
412
- private setLocalStorageItem;
413
- private removeLocalStorageItem;
414
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleQueueService, never>;
415
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleQueueService>;
465
+ declare class TaskScheduleActionService implements TaskScheduleActionDataAdapter {
466
+ private readonly http;
467
+ buildTaskMutation(task: unknown, options?: {
468
+ taskType?: unknown;
469
+ parentGuid?: string | null;
470
+ customProperties?: TaskScheduleCustomProperty[];
471
+ generalFields?: string[];
472
+ }): TaskScheduleTaskMutation;
473
+ createTask(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
474
+ updateTask(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
475
+ deleteTask(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
476
+ updateBulkTasks(context: TaskScheduleContext, payload: TaskScheduleTaskMutation[]): Observable<unknown>;
477
+ updateParent(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
478
+ updateOrder(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
479
+ updateProgress(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
480
+ applyImportedTasks(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
481
+ setBaseline(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
482
+ private submitTaskMutation;
483
+ private buildProcessSubmitRequest;
484
+ private buildProcessSubmitFields;
485
+ private mapBulkItem;
486
+ private pushField;
487
+ private pushOwnField;
488
+ private appendCustomProps;
489
+ private buildCustomPropFields;
490
+ private resolveResourcesField;
491
+ private assignIfDefined;
492
+ private buildCustomProps;
493
+ private resolveParentId;
494
+ private serializePredecessors;
495
+ private dependencyTypeToken;
496
+ private normalizeDependencyType;
497
+ private resolveModuleKey;
498
+ private resolveTypeScope;
499
+ private normalizeTaskType;
500
+ private normalizeResources;
501
+ private readData;
502
+ private levelEndpoint;
503
+ private readEndpoint;
504
+ private interpolateEndpointTemplate;
505
+ private requireId;
506
+ private requireProcessId;
507
+ private readId;
508
+ private toTaskId;
509
+ private toNullableString;
510
+ private toNullableNumber;
511
+ private toNullableBoolean;
512
+ private readNamedString;
513
+ private normalizeDuration;
514
+ private normalizeProgress;
515
+ private toApiDate;
516
+ private coerceDate;
517
+ private hasOwn;
518
+ private isObject;
519
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleActionService, never>;
520
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleActionService>;
416
521
  }
417
522
 
418
- declare function createGanttConfig(modelType: TaskScheduleModelKey, data: TaskScheduleDataResult, dateFormat: string, langCode?: 'en' | 'ar'): TaskScheduleGanttConfig;
419
-
420
- type TaskScheduleLanguage = 'en' | 'ar';
421
- declare function resolveTaskScheduleLanguage(preferred?: unknown, contextLangCode?: unknown): TaskScheduleLanguage;
422
-
423
523
  interface ImportPreviewRow {
424
524
  key: string;
425
525
  task: TaskScheduleTask;
@@ -429,24 +529,29 @@ interface ResourceOption {
429
529
  id: string | number;
430
530
  label: string;
431
531
  }
432
- declare class TaskScheduleImportModal {
433
- private readonly adapter;
434
- readonly visible: _angular_core.InputSignal<boolean>;
532
+ declare class TaskScheduleImportDialog {
533
+ readonly modal: ModalService;
534
+ private readonly ref;
535
+ private readonly fetchService;
536
+ private readonly actionService;
537
+ private readonly transloco;
538
+ private readonly selectionCellTpl;
539
+ private readonly taskCellTpl;
540
+ private readonly startDateCellTpl;
541
+ private readonly finishDateCellTpl;
542
+ private readonly actualStartDateCellTpl;
543
+ private readonly actualFinishDateCellTpl;
544
+ private readonly assignedToCellTpl;
545
+ private readonly progressCellTpl;
435
546
  readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
436
- readonly title: _angular_core.InputSignal<string | null>;
437
547
  readonly maxRows: _angular_core.InputSignal<number>;
438
- readonly closed: _angular_core.OutputEmitterRef<void>;
439
- readonly imported: _angular_core.OutputEmitterRef<TaskScheduleImportResult>;
440
- readonly applied: _angular_core.OutputEmitterRef<{
441
- overrideCurrent: boolean;
442
- response: unknown;
443
- }>;
444
- readonly failed: _angular_core.OutputEmitterRef<string>;
445
548
  readonly selectedFile: _angular_core.WritableSignal<File | null>;
446
549
  readonly loadingImport: _angular_core.WritableSignal<boolean>;
447
550
  readonly loadingApply: _angular_core.WritableSignal<boolean>;
448
551
  readonly importResult: _angular_core.WritableSignal<TaskScheduleImportResult | null>;
449
552
  readonly selectedTaskKeys: _angular_core.WritableSignal<Set<string>>;
553
+ readonly errorMessage: _angular_core.WritableSignal<string | null>;
554
+ private readonly activeLang;
450
555
  readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
451
556
  readonly isRtl: _angular_core.Signal<boolean>;
452
557
  readonly labels: _angular_core.Signal<{
@@ -477,21 +582,21 @@ declare class TaskScheduleImportModal {
477
582
  readonly hasSelection: _angular_core.Signal<boolean>;
478
583
  readonly canImport: _angular_core.Signal<boolean>;
479
584
  readonly canApply: _angular_core.Signal<boolean>;
585
+ readonly previewPageSize: _angular_core.Signal<number>;
586
+ readonly previewColumns: _angular_core.WritableSignal<ColumnDef[]>;
480
587
  onFileChanged(event: Event): void;
481
588
  importFile(): void;
482
589
  toggleRowSelection(rowKey: string, checked: boolean): void;
483
590
  selectAllRows(checked: boolean): void;
484
591
  applyImport(overrideCurrent: boolean): void;
485
592
  close(): void;
486
- trackByRow(_index: number, row: ImportPreviewRow): string;
487
- formatDate(value: unknown): string;
488
- toDateInputValue(value: unknown): string;
489
- resolveAssignedValue(task: TaskScheduleTask): string;
593
+ toDateFieldValue(value: unknown): Date | null;
594
+ resolveAssignedValue(task: TaskScheduleTask): string | number | null;
490
595
  normalizeProgress(value: unknown): number;
491
596
  onTaskTitleChanged(rowKey: string, value: string): void;
492
- onTaskDateChanged(rowKey: string, key: 'startDate' | 'finishDate' | 'actualStartDate' | 'actualFinishDate', value: string): void;
493
- onTaskAssignedToChanged(rowKey: string, value: string): void;
494
- onTaskProgressChanged(rowKey: string, value: string): void;
597
+ onTaskDateChanged(rowKey: string, key: 'startDate' | 'finishDate' | 'actualStartDate' | 'actualFinishDate', value: unknown): void;
598
+ onTaskAssignedToChanged(rowKey: string, value: unknown): void;
599
+ onTaskProgressChanged(rowKey: string, value: unknown): void;
495
600
  toAssignedEntity(task: TaskScheduleTask): EntityData;
496
601
  toProgressEntity(task: TaskScheduleTask): EntityData;
497
602
  private updateRowTask;
@@ -508,65 +613,56 @@ declare class TaskScheduleImportModal {
508
613
  private toApiDate;
509
614
  private formatDateForApi;
510
615
  private countTasks;
511
- private getErrorMessage;
512
- private emitError;
513
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleImportModal, never>;
514
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleImportModal, "mt-task-schedule-import-modal", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "imported": "imported"; "applied": "applied"; "failed": "failed"; }, never, never, true, never>;
616
+ private setError;
617
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleImportDialog, never>;
618
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleImportDialog, "mt-task-schedule-import-dialog", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
515
619
  }
516
620
 
517
- declare class TaskScheduleShell {
518
- private readonly adapter;
621
+ declare class TaskScheduleHeader {
622
+ private readonly actionService;
519
623
  private readonly queueService;
624
+ private readonly transloco;
625
+ private readonly modal;
626
+ private readonly activeLang;
520
627
  readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
628
+ readonly title: _angular_core.InputSignal<string | null>;
629
+ readonly modeOptions: _angular_core.InputSignal<TaskScheduleModeOption[]>;
521
630
  readonly modeChanged: _angular_core.OutputEmitterRef<string>;
522
631
  readonly baselineSet: _angular_core.OutputEmitterRef<unknown>;
523
- readonly tasksExported: _angular_core.OutputEmitterRef<void>;
524
632
  readonly actionError: _angular_core.OutputEmitterRef<string>;
525
633
  readonly currentModelType: _angular_core.WritableSignal<string>;
526
- readonly showImportModal: _angular_core.WritableSignal<boolean>;
527
634
  readonly settingBaseline: _angular_core.WritableSignal<boolean>;
528
- readonly exportingTasks: _angular_core.WritableSignal<boolean>;
529
- readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
530
635
  readonly resolvedContext: _angular_core.Signal<TaskScheduleContext | null>;
636
+ readonly currentModelKey: _angular_core.Signal<_masterteam_task_schedule.TaskScheduleModelKey>;
531
637
  readonly labels: _angular_core.Signal<{
532
- mode: string;
533
- setBaseline: string;
638
+ title: string;
534
639
  pending: string;
640
+ setBaseline: string;
535
641
  import: string;
536
- export: string;
537
- exportFileName: string;
538
- baselineNotSupported: string;
539
- exportNotSupported: string;
540
- contextMissing: string;
541
- baselineDisabled: string;
542
642
  }>;
543
- readonly currentModelKey: _angular_core.Signal<_masterteam_task_schedule.TaskScheduleModelKey>;
544
643
  readonly resolvedModes: _angular_core.Signal<{
545
644
  value: string;
546
645
  label: string;
646
+ icon: string;
647
+ color: string;
547
648
  }[]>;
548
649
  readonly showSetBaselineAction: _angular_core.Signal<boolean>;
650
+ readonly baselinePending: _angular_core.Signal<boolean>;
549
651
  readonly canSetBaselineAction: _angular_core.Signal<boolean>;
550
652
  readonly showImportAction: _angular_core.Signal<boolean>;
551
653
  readonly canOpenImport: _angular_core.Signal<boolean>;
552
- readonly canExportTasks: _angular_core.Signal<boolean>;
553
654
  constructor();
554
655
  onModeChange(nextValue: string): void;
555
- openImportModal(): void;
556
- closeImportModal(): void;
656
+ openImportDialog(): void;
557
657
  setBaseline(): void;
558
- exportTasks(): void;
559
- onImportedTasksApplied(): void;
560
- onActionError(message: unknown): void;
561
- private resolveModeLabel;
562
- private downloadBlob;
563
658
  private getErrorMessage;
659
+ private translate;
564
660
  private emitError;
565
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleShell, never>;
566
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleShell, "mt-task-schedule-shell", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; }, { "modeChanged": "modeChanged"; "baselineSet": "baselineSet"; "tasksExported": "tasksExported"; "actionError": "actionError"; }, never, never, true, never>;
661
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleHeader, never>;
662
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleHeader, "mt-task-schedule-header", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "modeOptions": { "alias": "modeOptions"; "required": true; "isSignal": true; }; }, { "modeChanged": "modeChanged"; "baselineSet": "baselineSet"; "actionError": "actionError"; }, never, never, true, never>;
567
663
  }
568
664
 
569
665
  declare const TASK_SCHEDULE_DEFAULT_PDF_FONT: string;
570
666
 
571
- export { TASK_SCHEDULE_DATA_ADAPTER, TASK_SCHEDULE_DEFAULT_PDF_FONT, TaskSchedule, TaskScheduleBackendAdapter, TaskScheduleImportModal, TaskScheduleQueueService, TaskScheduleShell, createGanttConfig, normalizeTaskScheduleModelType, resolveTaskScheduleLanguage };
572
- export type { TaskScheduleApplyImportPayload, TaskScheduleContext, TaskScheduleContextEndpoints, TaskScheduleCustomProperty, TaskScheduleDataAdapter, TaskScheduleDataResult, TaskScheduleGanttConfig, TaskScheduleImportResult, TaskScheduleLanguage, TaskScheduleModeOption, TaskScheduleModelAlias, TaskScheduleModelKey, TaskScheduleModelType, TaskSchedulePdfFonts, TaskSchedulePropertyDependency, TaskSchedulePropertyViewType, TaskScheduleTask, TaskScheduleTaskMutation, TaskScheduleTaskOrderUpdate };
667
+ export { TASK_SCHEDULE_DEFAULT_PDF_FONT, TaskSchedule, TaskScheduleActionService, TaskScheduleFetchService, TaskScheduleHeader, TaskScheduleImportDialog, normalizeTaskScheduleModelType };
668
+ export type { TaskScheduleActionDataAdapter, TaskScheduleApplyImportPayload, TaskScheduleBaselineSnapshot, TaskScheduleBaselineSnapshotItem, TaskScheduleBaselineVersion, TaskScheduleContext, TaskScheduleContextEndpoints, TaskScheduleCoreContextEndpoints, TaskScheduleCustomProperty, TaskScheduleDataResult, TaskScheduleDependency, TaskScheduleDependencyMutation, TaskScheduleDependencyType, TaskScheduleFeatureContextEndpoints, TaskScheduleFetchDataAdapter, TaskScheduleGanttConfig, TaskScheduleImportResult, TaskScheduleModeOption, TaskScheduleModelAlias, TaskScheduleModelKey, TaskScheduleModelType, TaskSchedulePdfFonts, TaskSchedulePropertyDependency, TaskSchedulePropertyViewType, TaskScheduleTask, TaskScheduleTaskMutation, TaskScheduleTaskOrderUpdate, TaskScheduleTimelineBucket, TaskScheduleTimelineMode };